为什么要用位域
struct S2
{
int i;
int j;
int k;
}data;
上面就是普通的结构体,sizeof量一下空间是12byte
此时我赋值结构体
struct S2 ss={3,1,6};实际上空间都没有存放满,浪费了很多的空间。下面引出了位域
使用位域
struct S2
{
unsigned char i:2;//上述的3 占用2bit
unsigned char j:1;//上述的1占用了1bit
unsigned char k:3;//上述的6占用了3bit
}data;
此时的sizeof量一下空间就是1byte
//扩充-----------------------------------------------------------------------------------------------------------
struct S2
{
unsigned char i:3;
unsigned char j:7;//前面一个字节的8位已经用了3位还剩下5位,此时的7bit放不下了,另外从头一个字节开始
unsigned char k:1;//7bit+1bit刚好可以放下
}data;
此时的sizeof量一下空间就是2byte,
struct S2
{
unsigned int i:3;
unsigned int j:7;
unsigned int k:1;
}data;
此时的sizeof量一下空间就是4byte,
//混类型-----------------------------------------------------------------------------
struct S2
{
unsigned char i:3;
unsigned char j:4;
unsigned int k:1;//这里int是4个byte 按最长的字节进行对齐----------上面虽然占了一个字节大但是要扩充到4个byte
}data;
此时的sizeof量一下空间就是8byte,
场景
C语言底层开发会遇到,因为从最小是byte转移到了bit 内存利用的更充分