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;
}
1) 如果相鄰位域字段的類型相同,且其位寬之和小於類型的sizeof大小,則後面的字段將緊鄰前一個字段存儲,直到不能容納爲止;
2) 如果相鄰位域字段的類型相同,但其位寬之和大於類型的sizeof大小,則後面的字段將從新的存儲單元開始,其偏移量爲其類型大小的整數倍;
3) 如果相鄰的位域字段的類型不同,則各編譯器的具體實現有差異,VC6採取不壓縮方式,Dev-C++採取壓縮方式;
4) 如果位域字段之間穿插着非位域字段,則不進行壓縮;
5) 整個結構體的總大小爲最寬基本類型成員大小的整數倍。