图解结构体大小和位域例子

struct A {
    short a;                
    
    char b;              
    int c : 1;           
    char d : 4; 
    short e : 7;
};

图解结构体大小和位域例子_第1张图片

备注:
    蓝色:表示占一个符号位空间
    红色:表示补齐
    其他颜色:实际最大值所占空间

(1)图解例1

struct A {
    short a;                
    char b; 
};

图解结构体大小和位域例子_第2张图片

 short a:2字节,因为其不是unsigned ,所以是第一位是符号位,区分正负,所以实际最大值为15位

图解结构体大小和位域例子_第3张图片

char b:1字节,因为其默认是unsigned ,所以实际最大值为8位

short:2字节
补齐:
     char:1字节
     补齐1字节
所以为4字节

(2)图解例2

struct A {
    short a;                   
    char b;              
    int c : 1;
};

图解结构体大小和位域例子_第4张图片

 short a:2字节,因为其不是unsigned ,所以是第一位是符号位,区分正负,所以实际最大值为15位 

图解结构体大小和位域例子_第5张图片

 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; 
}

图解结构体大小和位域例子_第6张图片

short a:2字节,因为其不是unsigned ,所以是第一位是符号位,区分正负,所以实际最大值为15位 

图解结构体大小和位域例子_第7张图片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;
};

图解结构体大小和位域例子_第8张图片

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字节 。

你可能感兴趣的:(内存大小,位域)