美文网首页
在80X86架构下,以下代码输出什么值?

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

作者: felixfeihu | 来源:发表于2017-03-22 20:41 被阅读0次

    问题:在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架构下,以下代码输出什么值?

          本文链接:https://www.haomeiwen.com/subject/dqfgnttx.html