Appearance
题目
若 short 型变量 x = -8190,则 x 的机器数为( )。
错因
B
补码取反加一时漏掉了"加一"。对 8190 = 1FFEH 按位取反得 E001H,没继续 +1 就直接当答案。这是补码定义的最常见疏忽——记忆里只剩下"取反",把 "+1" 忘了。
C
把"反码"当成了机器数。−8190 的反码 = 符号位 1 + 数值位(|x| 按位取反)= 1 1110 0000 0000 0000 (高位拼起来一种写法是 9FFFH 的形式)。但 C 语言里 short 用补码而非反码存储——题目隐含约定是补码,把反码当机器数就错了。
D
把"原码"当成了机器数。−8190 的原码 = 符号位 1(最高位)+ 数值位 |8190| = 1 0001 1111 1111 1110 = 9FFEH。原码只在课本"为了讲清概念"时用——主流平台 short 永远用补码存储。
总解析
第一步:写出 |x| = 8190 的二进制(16 位 short)
。所以:
第二步:求负数补码("取反加一"或"")
方法一:按位取反 + 1
方法二:补码定义 (按字段位宽取模)
两种方法结果一致,互相验证。
最终答案是 A(E002H)。
记忆诀窍:负数补码 = 原码符号位保持 1,剩下数值位先按位取反、再 +1。最容易出错的就是忘记 +1,刷题时强迫自己每次写出 +1 这一步。