天天看点

C语言中的bit位(:1)

事实上":1"代表的是1个bit

如下所示代码

struct bit_text_{
	uint8_t bit_test0 : 1;
	uint8_t bit_test1 : 1;
	uint8_t bit_test2 : 1;
	uint8_t bit_test3 : 1;
 
	uint8_t bit_test4 : 1;
	uint8_t bit_test5 : 1;
	uint8_t bit_test6 : 1;
	uint8_t bit_test7  : 1;
};
           

":“冒号在C语言中是位域的用法,主要是用来减少内存的占用

当然你也可以”:4"来占用4个bit位置。

以下来自https://zhidao.baidu.com/question/1958171216879892260.html

“知道大有可为答主”的回答

那么定义一个位段结构可以像下面这段代码去定义:

struct node
{
    unsigned int a:4;     //位段a,占4位
    unsigned int  :0;     //无名位段,占0位
    unsigned int b:4;     //位段b,占4位
    int c:32;             //位段c,占32位
    int  :6;              //无名位段,占6位
};
           

1)位段的类型只能是int,unsigned int,signed int三种类型,不能是char型或者浮点型;

2)位段占的二进制位数不能超过该基本类型所能表示的最大位数,比如在VC中int是占4个字节,那么最多只能是32位;

3)无名位段不能被访问,但是会占据空间;

4)不能对位段进行取地址操作;

5)若位段占的二进制位数为0,则这个位段必须是无名位段,下一个位段从下一个位段存储单元(这里的位段存储单元经测试在VC环境下是4个字节)开始存放;

6)若位段出现在表达式中,则会自动进行整型升级,自动转换为int型或者unsigned int。

7)对位段赋值时,最好不要超过位段所能表示的最大范围,否则可能会造成意想不到的结果。

8)位段不能出现数组的形式。

继续阅读