struct成員變量

 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

 

 

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