概要:printf("BitSeg2的字节数为: %d\n",sizeof(BitSeg2)); return 0; } 输出结果为: 第一次赋值后: a的值为:1 b的值为:2 第二次赋值后: a的值为:4 b的值为:-2 第二次赋值后: a的值为:0 b的值为:3 BitSeg1的字节数为: 4 BitSeg2的字节数为: 1 代码中的BigSeg1定义了两个int类型的字段,而且它们分别只占用4位和3位的空间。当BitSeg1中的a,b分别赋值为1和2时,输出的结果也如我们所料。当第二次赋值为100和30时,输出的结果却是4和-2,为什么呢? 1.赋值问题 出现上述问题,是由于赋值与位域效果共同形成的,a和b虽然都是int类型,但是在BigSeg1结构里,它们只有4位和3位为实际有效位。也就是BigSeg1中的前4位是a的,接着的3位是b的(这里没有字节的跨越问题)。执行ba1.a=100语句,其中100的二进制代码是:01100100,程序只把这100的二进制数的前面4位(已用红色字体
C语言里的位域(一),标签:电脑故障大全,电脑故障分析,http://www.laixuea.com