1.位段的定义:
位段是定义结构体(或联合体)中的成员变量所占的空间,单位是bit。含有位段的结构体(联合体)称为位段结构。
2.位段的意义:
能够节省空间。比如性别,2个bit位可以表示2^2=4种可能性,不需要一个整形32个bit位。
3.位段相对于结构体的限制:
位段的声明跟结构体相比,有两个限制:
1.位段的成员必须是整形家族的,如int,unsigned int或signed int或char类型的,因此位段大小必须<=32bit
2.位段的成员名后边有一个冒号和一个数字
4.位段的内存分配:
1.位段在内存空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的。
2.位段设计很多不确定的因素,位段是不跨平台的,注重可移植的程序应该避免使用段位
位段举例,如:
1. struct S 2. { 3. char a : 3; //a成员占3个比特位 4. char b : 4; //b成员占4个比特位 5. char c : 5; //c成员占5个比特位 6. char d : 4; //d成员占4个比特位 7. }; 8. 9. int main() 10. { 11. 12. struct S s = { 0 }; 13. s.a = 10; 14. s.b = 12; 15. s.c = 3; 16. s.d = 4; 17. return 0; 18. }
结构体变量s的成员bit位使用:
a占3个bit位,但10的二进制有4个bit位1010,要存入3个bit位,低3位存入010,高1位丢弃
b占4个bit位,12的二进制有4个bit位1100,刚好可以存入4个bit位
c占5个bit位,3的二进制有2个bit位11,可以存入5个bit位
d占4个bit位,4的二进制有3个bit位100,可以存入4个bit位
使用VS2019编译,F10调试,监视内存,输入&s,内存中存入的就是62 03 04