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