[c]位域/位段
2021/06
29
17:06
#include <stdio.h>
struct Fruit
{
char field1 : 1;
char field2 : 1;
};
int main()
{
Fruit fruit;
fruit.field2 = 1; // 只能使用0和1
fruit.field1 = 1; // 只能使用0和1,如果宽度2则可以0,1,2,3
unsigned char uc1= *(unsigned char*)(&fruit);
printf("a1=%d, a2=%d, c=%d\n", fruit.field1, fruit.field2, uc1); // print: 1, 1, 3
}
1、一个位域存储在同一个字节中,如一个字节所剩空间不够存放另一位域时,则会从下一单元起存放该位域
2、位域的宽度不能超过它所依附的数据类型的长度,成员变量都是有类型的,这个类型限制了成员变量的最大长度,: 后面的数字不能超过这个长度
3、位域可以是无名位域,这时它只用来作填充或调整位置