struct A {short a; char b; int c : 1; char d : 4; short e : 7;
};
备注:蓝色:表示占一个符号位空间红色:表示补齐其他颜色:实际最大值所占空间
(1)图解例1
struct A {short a; char b;
};
short a:2字节,因为其不是unsigned ,所以是第一位是符号位,区分正负,所以实际最大值为15位
char b:1字节,因为其默认是unsigned ,所以实际最大值为8位
short:2字节
补齐:char:1字节补齐1字节
所以为4字节
(2)图解例2
struct A {short a; char b; int c : 1;
};
short a:2字节,因为其不是unsigned ,所以是第一位是符号位,区分正负,所以实际最大值为15位
int c:1位,因为其不是unsigned 所以是第一位是符号位,所以实际最大值为0位
short:2字节
补齐:char:1字节int c:1补齐7位
所以为4字节
(3)图解例3
struct A {short a; char b; int c : 1; char d : 4;
}
short a:2字节,因为其不是unsigned ,所以是第一位是符号位,区分正负,所以实际最大值为15位
char d:4位,因为其默认是unsigned ,所以实际最大值为4位
short:2字节
补齐:char:1字节int c:1char d:4补齐3位
所以为4字节
(4)图解例4
struct A {short a; char b; int c : 1; char d : 4; short e : 7;
};
short d:7位,因为其不是unsigned 所以是第一位是符号位,所以实际最大值为6位
short:2字节
补齐(1):char:1字节int c:1char d:4补齐3位
所以为4字节补齐(2):short:7位补齐:25位
所以为4字节总共8字节
【总结】
结构体中int型是最大的字节数为4,取结构体成员的时候,可以按照4字节来取,然后再根据自身所占大小来划分对应的地址。所以 short2字节,本该补齐2字节,但是成员里的b是8位,c是1位,d是4位,相加为13位<16位,那么补齐3位,也就是b、c、d构成2字节,那么a、b、c、d构成4字节。e是7位,补齐25位,也就是4字节。所以结构体大小为8字节 。