//位段----结构体实现位段的能力: //位段和结构体类似,但是两个不同: //1.位段的成员必须是int,unsigned int或signed int //2.位段的成员后面有一个冒号和一个数字 //struct A 结构体 struct A 位段 //{ { // int_a; int _a:2; // int_b; int _b:5; // int_c; int _c:10; // int_d: int _d:30; //}; }; //上面的位段 -----一定程度上节省空间 ----4字节最大32bit,不能放置32以上的 //struct A //{ //int型开辟4个字节---32bit // int _a : 2;//32-2=30 // int _b : 5;//30-5=25 // int _c : 10;//25-10=15 // int _d : 30;//15不够,重新开辟4个字节,放置30bit,但是这30不要求掌握是15的还是32的 //}; //int main() //{ // printf("%d\n", sizeof(struct A));//8----8字节 // return 0; //} //在vs里怎么存储的呢 //struct S //{ // char a : 3; // char b : 4;//a占3bit,b占4bit,放在1个字节中 // char c : 5;//c占5bit,d占4bit,不能放一个字节中,分开放 // char d : 4;//所以类似为3个字节,分别为00000000 00000000 00000000 //}; //struct S //{ // struct S s = { 0 }; // s.a = 10;//把a的3个bit放10->1010(二进制),但是只能放3个010 // s.b = 12;//把b的4个bit放12->1100(二进制),放1100 // s.c =3;//把c的5个bit放3->00011(二进制),放00011 // s.d =4;//把d的4个bit放4->0100(二进制),放0100 // return 0; //};//在vs编译器内,内存先使用低比特的数据,在使用高比特位,ab按顺序从右向左使用,(先放右在放左)
使用后变为0(空置放0)1100(b) 010(a) 000 00011(c) 0000 0100(d)
即内存中为01100010 00000011 00000100(16进制)
即 6 2 0 3 0 4
//int main() //{ // // return 0; //}