1.什么是位段:
c
struct A
{
int _a:2;
int _b:5;
int _c:10;
int _d:30;
};
1.A就是一个位段类型的变量,位表示比特位,意思是 A中的变量申请内存的比特位数
比如 _a要占 2 个bit
2.位段的成员必须是 int ,unsigned int ,signed int 类型的,在C99中段位成员可以有 char类型的。
2.段位中的内存分配:
c
#include<stdio.h>
struct A
{
int _a : 2;
int _b : 5;
int _c : 10;
int _d : 30;
};
int main()
{
printf("%d", sizeof(struct A));
}
位段的空间上是按照需要以4个字节( int )或者1个字节( char )的⽅式来开辟的。
而且是先把十进制转化为二进制,再根据申请的bit数从低位截断后进行存储的,当开辟的8个bit位剩余空间不够存下一个时,再开辟下一个内存空间(8bit)
3.位段使用注意事项:
内存中,每个字节分配一份空间,而位段中的成员可能并不是每个都独自占 1 个字节的空间,所以直接取某个成员的地址是没有意义的,一个字节内部的bit 位是没有地址的
错误写法:
正确写法:
c
#include<stdio.h>
struct A
{
int _a : 2;
int _b : 5;
int _c : 10;
int _d : 30;
};
int main()
{
struct A a = { 0 };
int b = 0;
scanf("%d", &b);
a._b = b;
return 0;
}