// 7、结构体实现位段的功能
// 8、位段成员必须是 :int unsigned int ,signed int,c99 中可以是其他类型
// 位指的是二进制位,大小不能超过自身类型的大小,例如int类型占32位,那么int类型的位段成员最多只能有32位。
// 9、位段成员不能有初始值,成员后面必须要有冒号和一个数字
// 位段的空间是按照需要以 4(int)个字节或1(char)个字节的方式来开辟的// struct bit_seg {
// unsigned int _a:10; // 10位,数字代表位数
// int _c:12;
// signed int _d:16;
// };
// int main() {
// struct bit_seg bs;
// printf("%zd\n", sizeof(bs)); // 8个字节 10 12 :32 ,16:32
// return 0;
// }
// 10、给定了空间后,是从左向右使用还是从右向左使用,不确定
// 11、当剩下的空间不足以存放下一个成员时,空间会浪费还是继续使用,不确定
// 12、位段的跨平台性:
// 位段的最大位的数目不能确定,
// int位段被当成有符号和无符号位是不确定的
// 位段中的成员在内存中从左向右分配,还是从右向左分配,标准未定义
// 跟结构相比,位段可以达到同样的效果,并且可以很好的节省空间,不能实现跨平台
// 位段的应用:不能位段的成员使用 & 运算符 和成员访问符号// struct node {
// unsigned int a : 1;
// unsigned int b : 1;
// int c : 10;
// int d : 10;
// };
// int main() {
// struct node n = {0};
// int d = 0;
// scanf ("%d", &d);
// n.d = d; // 赋值给一个变量 ,不能直接赋值
// printf ("%d\n", n.d);
// return 0;
// }// struct node {
// unsigned int a : 1;
// unsigned int b : 1;
// unsigned int c : 1;
// unsigned int d : 1;
// unsigned int e : 1;
// unsigned int f : 1;
// unsigned int g : 1;
// unsigned int h : 1;
// };