C | 位域&联合体

位域和联合体搭配使用:

union u8 {
    unsigned char whole;
    struct {
        unsigned char bit0:1;
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char :1;  // 占位
        unsigned char bit7:1;
    }bits;

    u8() {  // C++ 才行,C 只能在使用时
        whole = 0x00;
    }
};

x86 小端模式(内存高地址存放数据高字节,寄存器大于一个字节时,大小端就有区别了):

1 u8 flag;
2 flag.bits.bit0 = 0x01;    // 低地址数据置一
3 cout << (int)flag.whole << endl;    // 输出 1,说明低地址存放的地位数据

对齐:

如上,bits 这个位域结构的对齐就该是 unsigned char 的整数辈

而对于 u8 联合体,对齐得看 bits 和 whole 最大的那个。

 

posted on 2015-09-26 02:03  Excavator  阅读(1097)  评论(0编辑  收藏  举报

导航