C-C++练习10

来源:互联网 发布:手机游戏源码论坛 编辑:程序博客网 时间:2024/05/22 01:30

1、下面程序在80x86架构下,输出什么值?

union Test{    char a[4];    short b;}Test t;t.a[0] = 256;t.a[1] = 255;t.a[2] = 254;t.a[3] = 253;printf("%d\n", t.b);

答案: -256
分析:
char类型的取值范围是-128~127,unsigned char的取值范围是0~256
这里a[0]=256,出现了正溢出,将其转换到取值范围内就是0,即a[0]=0;
同理,a[1]=-1, a[2]=-2, a[3]=-3,在C语言标准里面,用补码表示有符号数,故其在计算机中的表示形式如下:
a[0]=0, 0000 0000
a[1]=-1, 1111 1111(反码+1 = -1)
a[2]=-2, 1111 1110
a[3]=-3, 1111 1101
short是2字节(a[0]和a[1]),由于80X86是小端模式,即数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中,在本例中,a[0]中存放的是b的低位,a[1]中存放的是b的高位,即b的二进制表示是:1111 1111 0000 0000,表示-256

0 0
原创粉丝点击