位域

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)  整個結構體的總大小爲最寬基本類型成員大小的整數倍。

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