{
char t:4;
char q:4; //1
// unsigned int i:8;
// unsigned int j:8;
// unsigned int a:8;
// unsigned int b:8;
// unsigned int c:8;
// char k:4;
// unsigned int m;
// double n;
};
sizeof(A)=1; 两个4位 char数据组成一个字节
(2)struct A
{
char t:4;
char q:4; //1
unsigned short r:8; //2 对齐组合成4
unsigned int i:8;//4
// unsigned int j:8;
// unsigned int a:8;
// unsigned int b:8;
// unsigned int c:8;
// char k:4;
// unsigned int m;
// double n;
};
sizeof(A)=8; 两个4位 char数据组成一个字节与整型对齐为8个字节
(3)struct A
{
char t:4;
char q:4; //1 对齐成4
unsigned int i:8;//4
// unsigned int j:8;
// unsigned int a:8;
// unsigned int b:8;
// unsigned int c:8;
// char k:4;
// unsigned int m;
// double n;
};
sizeof(A)=8; 两个4位 char数据组成一个字节与整型对齐为8个字节
(4)struct A
{
char t:4;
char q:4; //1 对齐组合成4
unsigned int i:8;
unsigned int j:8;
unsigned int a:8;
unsigned int b:8; //4 这四句话组合成4
// unsigned int c:8;
// char k:4;
// unsigned int m;
// double n;
};
sizeof(A)=8; 两个4位 char数据组成一个字节与整型对齐,4个8位的整型数据组成4个字节,一共有8个字节
5)struct A
{
char t:4;
char q:4; //1 对齐组合成4
unsigned int i:8;
unsigned int j:8;
unsigned int a:8;
unsigned int b:8; //4 对齐组合成4
unsigned int c:8; //4 对齐组合成4
char k:4; //1 对齐组合成4
// unsigned int m;
// double n;
};
sizeof(A)=12;
(6)struct A
{
char t:4;
char q:4; //1 对齐组合成4
unsigned int i:8;
unsigned int j:8;
unsigned int a:8;
unsigned int b:8;//4 对齐组合成4
unsigned int c:8;//4 对齐组合成4
char k:4; //1 对齐组合成4
// unsigned int m;
// double n;
};sizeof(A)=16;
(7)struct A
{
char t:4;
char q:4; //1 对齐组合成4
unsigned int i:8;
unsigned int j:8;
unsigned int a:8;
unsigned int b:8;//4 对齐组合成4
unsigned int c:8;//4 对齐组合成4
char k:4; //4 对齐组合成4
unsigned int m; //4 对齐组合成4
// double n;
};sizeof(A)=20;
(8)struct A
{
char t:4;
char q:4; //1
unsigned int i:8;
unsigned int j:8;
unsigned int a:8;
unsigned int b:8;//4 // 对齐组合成8
unsigned int c:8;//4
char k:4; //4 // 对齐组合成8
unsigned int m;//4 // 对齐组合成8
double n; //8
};sizeof(A)=32; 与8位double型数据对齐
总结:(1)当最高位为char型数据时,组合成char型数据,此时sizeof为1的整数倍。
(2)当最高位为short型数据时,组合成short型数据,可以把其中的不够16位的同一种数据组合起来成16位,不同数据不能组合在一起,此时sizeof为2的整数倍。
(3)当出现数据位最高为整型数据,也即32位数据,可以把其中的不够32位的同一种数据组合起来成32位,不同数据不能组合在一起,sizeof为4的整数倍
(4)当出现数据位最高为double数据,也即64位数据,可以把其中的不够32位的同一种数据组合起来成32位,同时可以把不同种数据组合成64位,ziseof为8的整数倍
(5)有符号和无符号数按同一种类型对待,long Int与int按同一种类型对待
(6)首先关注最高位,把相邻的数据组合成最高位。