union 内存分配

#include <stdio.h>

union V
{
    struct X
    {
        unsigned char s1:1;
        unsigned char s2:1;
        unsigned char s3:4;
    } x;
    unsigned char s1:1;
    unsigned char s2:1;
    unsigned char s3:4;
    unsigned char c;
} v;

int main()
{
    v.c = 108;  // 0110 1100
    // v.c = 108 + 2; // 0110 1110
    printf("%d\n", v.x.s3);	// 小端,内存从右到左依次分配 v.x.s1:0, v.x.s2:0, v.x.s3:11
    printf("%d\n", v.s3);	// 小端,内存都从最右边同一位置开始分配(共用)

    printf("%d\n", v.x.s2);
    printf("%d\n", v.s2);

    return 0;
}

output:
11
12
0
0
 
喜欢 0
分享