",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。