#include<iostream>
#include <bitset>
using namespace std;
struct a{
int x:1;
int y:2;
int z:32;
};
int main()
{
a d;
d.x=8;
d.y=8;
d.z=6;
cout<<bitset<sizeof(int)*8>(d.x)<<endl;
cout<<bitset<sizeof(int)*8>(d.y)<<endl;
cout<<bitset<sizeof(int)*8>(d.z)<<endl;
printf("%d %d %d %d",d.x,d.y,d.z,sizeof(d));
return 0;
}
我们首先分析显示,当均赋值为0时,均不超过位数限制所以输出正确。
当赋值为0时
当赋值为1时
当赋值为2时
当赋值为3时
当赋值为4时
当赋值为5时
继续进行赋值的话会发现:
对x来说,当数值的二进制形式的右边第一位为1时,输出-1,为0时,输出0;
对y来说,当数值的二进制形式的右边第二位为1时,其左边均为1,为0时其左边均为0,与第一位的数值无关,因而可能会出现的值为-2,-1,0,1四种情况;
接下来我们分析一下sizeof(d)的大小
int x:1;//x:l
int y:2;//x:m
int z:32;
z占4个字节,
当l+m<=32时,sizeof(d)为8;
当l+m>32时,sizeof(d)为12;