最近在看《程序员面试宝典第三版》(书感觉较差),第十二章 位运算与嵌入式编程,有一段代码如下所示:
d.x=d.y=d.z=3时,结果为:
看不太懂,就自己写了一段代码测试了一下(好吧,如何打印位运算是百度的):struct a{
int x:1;
int y:2;
int z:33://超过了4字节,会造成越界,最大为32
};
d.x,d.y,d.z都为0时打印结果为:int main() { a d; d.x=0;//分别等于0,1,2,3,4,5测试打印结果 d.y=0;//分别等于0,1,2,3,4,5测试打印结果 d.z=0;//分别等于0,1,2,3,4,5测试打印结果 cout<<bitset<sizeof(int)*8>(d.x)<<endl;// sizeof(int)结果为4,也就是四字节,一个字节8位,共32位。 cout<<bitset<sizeof(int)*8>(d.y)<<endl; cout<<bitset<sizeof(int)*8>(d.z)<<endl; return 0; }
![C++中 形如int x:1;int x:2;int x:32(冒号后为1-32,32为最大值)的意思解释 - zerfew - Zerfew](http://img6.ph.126.net/j9va4gtyfmpIQz7-yAP66w==/1018657940733269566.jpg)
d.x=d.y=d.z=1时,结果为:
![C++中 形如int x:1;int x:2;int x:32(冒号后为1-32,32为最大值)的意思解释 - zerfew - Zerfew](http://img4.ph.126.net/i-KPO-m5q6Udu0UZiQYV2w==/1353894637995658504.jpg)
d.x=d.y=d.z=2时,结果为:
![C++中 形如int x:1;int x:2;int x:32(冒号后为1-32,32为最大值)的意思解释 - zerfew - Zerfew](http://img1.ph.126.net/zlr3r9b8NklUX-S84_MkCQ==/2693997002115091091.jpg)
![C++中 形如int x:1;int x:2;int x:32(冒号后为1-32,32为最大值)的意思解释 - zerfew - Zerfew](http://img2.ph.126.net/dygSBIVqPLHgYI2R26cixA==/2531867415529752622.jpg)
d.x=d.y=d.z=4时,结果为:
![C++中 形如int x:1;int x:2;int x:32(冒号后为1-32,32为最大值)的意思解释 - zerfew - Zerfew](http://img8.ph.126.net/Pv_uf9wpAAddXvvud2fu-A==/1120551882302522318.jpg)
d.x=d.y=d.z=5时,结果为:
![C++中 形如int x:1;int x:2;int x:32(冒号后为1-32,32为最大值)的意思解释 - zerfew - Zerfew](http://img4.ph.126.net/oSAWnxOQdDG6Ey7IQR3_qg==/1356427912786048224.jpg)
所以我觉得应该是分配的32位,但以1或者2或者指定的位数为单位,将这个字节分组。
不过还是有点疑问的,就是
bitset<sizeof(int)*8> 这个语句指定了二进制显示的长度,本人有时间再进行测试分析。