struct Astruct{
unsigned int x:3; //指明變量的位數
int y:3;
int z:32;
};
void main(){
Astruct a;
a.x = 0x5; //以十六進制形勢賦值=1
a.y = 0x5;
cout << "sizeof(a) = " << sizeof(a) << endl;
a.z = a.x + a.y;printf("%d,%d,%d\n",a.x,a.y,a.z);
printf("%x,%x,%x\n",a.x,a.y,a.z);
unsigned char* pt = (unsigned char*)(&a);
for (int i=0; i<8; i++)
{
printf("%x ",*pt++);
}
}
輸出:
sizeof(a) = 8 //根據指定變量的位數,以及默認內存對齊的規則,佔用8字節,而不是12字節
5, -3, 2 //輸出-7而不是9,這是因爲
5, fffffffd,2 //unsigned int使用原碼輸出,在高位補0,所以輸出爲5;而int作爲有符號數,並且5(101)的最高位爲1,而自動全部填入1,所以等於fffffffd;(當然如果最高位爲0,則會全部補爲0,從而能正常輸出),然後按照補碼輸出,即爲-3
ed cc cc cc fa ff ff ff