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:1
char 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:1
char 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字节 。

![VSCODE[配置ssh免密远程登录]](https://img-blog.csdnimg.cn/e4cff4422f164e139e9d38aef7ed73ea.png)








![[HDLBits] Exams/m2014 q4a](https://img-blog.csdnimg.cn/img_convert/9ae35d2de0c7d4e4e49ccb3affdf36cc.png)








