首页 > 试题广场 >

一个C语言程序在一台32位机器上运行。程序中定义了三个变量x

[单选题]
一个C语言程序在一台32位机器上运行。程序中定义了三个变量xyz,其中x和z是int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,xyz的值分别是
  • X=0000007FH,y=FFF9H,z=00000076H
  • X=0000007FH,y=FFF9H,z=FFFF0076H
  • X=0000007FH,y=FFF7H,z=FFFF0076H
  • X=0000007FH,y=FFF7H,z=00000076H
我添加一个答案吧,希望能帮助后面的人。通过我理解这题得 给点个赞,谢谢。

X = 127  (int 占 4字节 32位) 换算16进制 就是 0000007FH
Z = 127 - 9 = 118同上 , 16 进制 是 00000076H

Y = -9 二进制用补码表示
源码:1000 0000 0000 1001
反码:1111 1111 1111 0110
补码:反码+1
1111 1111 1111 0111
F F F 7
编辑于 2017-03-13 18:19:37 回复(6)
int x = 127;
4字节
0000 0000 0000 0000 0000 0000 0111 1111

short y = -9;
2字节
原码:1000 0000 0000 1001
补码:1111 1111 1111 0111(从右到左,除第一位和符号位依次取反即可

int z = 118;
4字节
0000 0000 0000 0000 0000 0000 0011 0111

还有一点值得注意的是:x+y时,int可以表示所有的short值,所以y类型提升为int 0xFFFFFFF7(负数左补1,正数补0)
相加
0000007F
+ FFFFFFF7
00000076
编辑于 2017-03-09 23:52:58 回复(0)
正数用原码表示
负数用反码加1表示
发表于 2017-02-15 12:54:40 回复(0)
负数以补码形式存储,而正数的源码补码反码都是一样的,负数的补码有一个简便的方法,写出负数的源码,符号位不变,从最低位开始向前找,直到遇到第一个1,然后保留这个1,把1前面的数全部取反,即求得补码
发表于 2017-09-15 16:26:00 回复(0)
没有越界,负数用补码表示
发表于 2017-09-14 11:24:21 回复(0)
只要知道short在这里要进行整形提升就行
发表于 2017-08-02 00:08:35 回复(0)
所谓答案解析就是让你自己填解析
发表于 2017-02-13 16:58:40 回复(0)