//结构体--位段 (位 指二进制位 )
// 位段的声明与结构体是类似的
// 1,位段的成员必须是 int ,unsigned int 或 signed int
// 2,位段的成员名后边有一个冒号和一个数字。(数字表示开辟需要的比特位个数)
//
// 位段的内存分配
// 1,位段的成员可以是 int/unsigned int/signed int/char 整型家族类型
// 2,位段的空间是按照需要4个字节或者1个字节的方式开辟的
// 3,位段涉及很多不确定因素,是不夸平台的,注重可移植的程序要避免使用
// {1,int的有无符号位是不确定的
// 2,位段的最大位的数目不确定的
// 3,位段中的成员在内存中是从左向右分配还是从右向左分配标准未定义
// 4,当一个结构包含两个位段,第二个位段成员比较,无法容纳于第一个位段剩余
// 的位时,是否舍弃剩余位还是继续利用,是不确定的}
//
struct S
{
int _a : 2;//需要2个bit位
int _b : 5;
int _c : 10;
int _d : 30;
};
struct S1
{
char a : 3;
char b : 4;
char c : 5;
char d : 4;
};
int main()
{
struct S a;
struct S1 s;
s.a = 10;
s.b = 20;
s.c = 3;
s.d = 4;//取地址s 可得到 十六进制 (为开辟空间后二进制转换为16进制)
printf("%zd\n", sizeof(a));//8个字节
printf("%zd\n", sizeof(s));
return 0;
}