C语言位段的问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 07:59:43
main()
{struc bs
{unsigned a:1;
unsigned b: 3;
unsigned c:4;

}bit;
bit.c=15;
printf("%d",bit.c);
}
把bit.c=15改成bit.c=16就错了,请问为什么?

因为你只给c声明了4位,能表示的最大的数是15,赋给它16时溢出,所以结果为0。

因为4bit最多只能表示2的4次方的数(从0开始),所以最大值只能是0到15的16个值。如果赋值大于16,结果就会是整除16的结果。如改为16,=0;改为17,=1;改为32,=0,改为33,=1,改为34,=2。(高位被丢失的原因。)

溢出

Bit定义太小。。为2的4次方
即 0000
c=1111(2进制)=15(10)
16时变成10000 有溢出……