在80X86架构下,以下代码输出什么值?

问题:在80X86架构下,以下代码输出什么值?

union Test

{

chara[4];

shortb;

};

Test test;

test.a[0]=256;

test.a[1]=255;

test.a[2]=254;

test.a[3]=253;

printf("%d\n",test.b);


答案如下:

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

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,故输出-256。

你可能感兴趣的:(在80X86架构下,以下代码输出什么值?)