[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、位域可以是无名位域,这时它只用来作填充或调整位置