",cc.xx);

結果會是:-1

因為這里定義的xx為int 型,15的二進制位1111,最高位為1,表示為負數(shù),所以取反加1后為0001。所以是-1。

這種位域操作的好處是當你不需要用到你定義的類型的長度時,可以加位域操作以節(jié)省內(nèi)存空間。

引出的其他問題

這里用sizeof(struct a)得到的是4,如果不加位域限制則是8,至于為什么是4呢?4bit+4bit應該剛好是1byte啊,應該是1才對啊。這是因為我是在linux下編譯執(zhí)行的,而在linux對內(nèi)存分配最小值為類型值的一半。(我在linux下做了實驗)如下我定義了一個結構體:

struct a{

short int xx:2;

short int yy:2;

}bb;

如上,我定義二個short int類型值,short int在32位linux下為2字節(jié),這里二個相加不足一字節(jié),但是輸出sizeof(struct a)的值為2。不足一字節(jié)系統(tǒng)自動補滿一字節(jié)。

struct a{

short int xx:9;

short int yy:2;

}bb;

這個輸出也是2。xx超過一字節(jié),但是9+2=11,還沒有超過16(2字節(jié)),我猜系統(tǒng)將xx超過的那1bit分到了yy那1bit里面了。

struct a{

short int xx:9;

short int yy:9;

}bb;

這個輸出是4。9+9=18,超過了16,系統(tǒng)各分配了2字節(jié)給xx和yy。

分享到

hanrui

相關推薦