位段
我们已经了解了结构体,位段 和结构体类似,但是依然有不同之处:
1.位段的成员必须是int、unsigned int 、signed int、char(属于整型家族)。
2.位段的成员后边有一个冒号和一个数字(数字代表如果是32位bit位可以使用的权限)。
结果为:8。解释如下:
位段的内存分配:
1.位段的成员可以是int、unsigned int 、signed int、char(属于整型家族)。
2.位段的空间上是按照4个字节(int)或者1个字节(char)的方式来开辟的。
3.位段涉及很多不确定因素,位段不跨平台,所以可移植的程序避免使用位段。
对于位段的不跨平台解释如下:
int位段被当成有符号或是无符号是不确定的;
位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,如果数字写为27,在16位机器是不可以的);
位段中的成员在内存中是从左向右分配,还是从右向左分配尚未定义。(上述例子采用从左向右分配);
当一个结构包含两个位段,第二个位段成员比较大,无法容纳第一个位段剩余的位时,是舍弃剩余的还是利用,这是不确定的。
请看下列例子如何开辟?
结果为 2 12 3 4,由此可知位段溢出不会影响其他成员数据。
总结:位段和结构相比,可以达到同样的效果,可以很好节省空间,但是存在不跨平台问题。