哪个位在带有位域的结构中?

时间:2014-09-09 07:31:56

标签: c structure bit-fields

#include <string.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

typedef struct AA {
    int a1:5;
    int a2:2;
} AA;

int main() {
    AA aa;
    char cc[100];
    strcpy(cc, "0123456789");
    memcpy(&aa, cc, sizeof(AA));
    printf("%d\n", aa.a1);
    printf("%d\n", aa.a2);
    return 0;
}

我的意思是我知道sizeof(AA) sizeof(int)等于4字节,将"0123"复制到aa之后,二进制数是

00110011,00110010,00110001,00110000
    3         2        1         0

但我不明白哪些位是a1:5a2:2

1 个答案:

答案 0 :(得分:3)

位域的排列不规范。

根据您的搜索结果,a1暂停10000a2暂停01。可能出现的一种方法是,a1cc[0]的最低5位,而a2是下一个最低2位。

也就是说,cc[0]00110000,其被划分为0 01 10000

如果您对值进行了更多实验,您可以确定编译器正在使用哪个顺序。