位域

union UnionTry{
    struct  
    {
        unsigned int m_cBit1   :1;
        unsigned int m_cBit2   :1;
        unsigned int m_cBit3   :1;
        unsigned int m_cBit4   :1;
        unsigned int m_cBit5   :1;
        unsigned int m_cBit6   :1;
        unsigned int m_cBit7   :1;
        unsigned int m_cBit8   :1;
    }Node;
    int m_cByte; // 4*8位
};
int _tmain(int argc, _TCHAR* argv[])
{
    UnionTry myTry;
    myTry.m_cByte = 0x11;
    cout << "m_cByte:" << myTry.m_cByte << endl;
    myTry.Node.m_cBit1 = 0;
    cout << hex << static_cast<int>(myTry.Node.m_cBit1) << endl;
    cout << hex << static_cast<int>(myTry.Node.m_cBit2) << endl;
    cout << hex << static_cast<int>(myTry.Node.m_cBit3) << endl;
    cout << hex << static_cast<int>(myTry.Node.m_cBit4) << endl;
    cout << hex << static_cast<int>(myTry.Node.m_cBit5) << endl;
    cout << hex << static_cast<int>(myTry.Node.m_cBit6) << endl;
    cout << hex << static_cast<int>(myTry.Node.m_cBit7) << endl;
    cout << hex << static_cast<int>(myTry.Node.m_cBit8) << endl;
    cout << "m_cByte:" << myTry.m_cByte << endl;
return 0;
}
int a;

1)  如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;  
2)  如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;  
3)  如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++采取压缩方式;  
4)  如果位域字段之间穿插着非位域字段,则不进行压缩;  
5)  整个结构体的总大小为最宽基本类型成员大小的整数倍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章