Skip to content

2018年 408 计算机组成原理 第 13 题

计算机组成原理2018年选择题2分

题目

假定带符号整数采用补码表示,若 int 型变量 x 和 y 的机器数分别是 FFFF FFDFH 和 0000 0041H,则 x、y 的值以及 x-y 的机器数分别是( )。

错因

A

把 y 的真值算成"41"——直接把 0x41 当成十进制的 41,没换算成 65(0x41 = 4×16 + 1 = 65)。x 也算错(0xFFFFFFDF 的绝对值算成 0x41 = 65 → x=-65)。又错判溢出:异号相减结果在范围内不会溢出,所谓"溢出"只是缺乏对溢出判定规则的把握时的拍脑袋结论。

B

真值都对(x=-33,y=65),但 x-y = -98 的补码末位算错。-98 的二进制末两位应是 1110_(=0xE),写成 1101_(=0xD) 差了 1。原因是求 -98 的补码时"取反加 1"少加了 1,或者把 +98 的二进制末位记错。

D

真值大半搞反——把 x 算成 -65、y 算成 41(同 A 的错),相减 -65-41 = -106 → 补码 0xFFFFFF96。算式逻辑链自洽(这就是迷惑性所在),但起点错了:y 的 0x41 被当成十进制 41 而不是十六进制(=65)。

总解析

第一步:求 x 的真值

x = 0xFFFF_FFDF,最高位是 1 → x 是负数。

求绝对值("取反加 1"):

步骤二进制(按字节展开末段)十六进制
x 机器数1111 1111 1111 1111 1111 1111 1101 1111FFFFFFDF
按位取反0000 0000 0000 0000 0000 0000 0010 000000000020
加 10000 0000 0000 0000 0000 0000 0010 000100000021

x = −33

第二步:求 y 的真值

y = 0x0000_0041,最高位是 0 → y 是正数。

y = 65

第三步:算 x − y

求 -98 的 32 位补码:

步骤末段二进制十六进制
+98 二进制0110 00100x62
32 位填 00000...0000 0110 00100x00000062
按位取反1111...1111 1001 11010xFFFFFF9D
加 11111...1111 1001 11100xFFFFFF9E

x − y 的机器数 = FFFFFF9EH

最终答案是 C(x=-33,y=65,x-y 的机器数为 FFFFFF9EH)

也可以用减法直接做(验证)

按位相减(借位较繁,建议反过来用 [-y]补 加法验证):

[-y]补 = 0xFFFFFFBF(65 → -65 的补码)

最高的进位丢弃,结果 = 0xFFFFFF9E

易错点速查

  1. 0x41 ≠ 41。十六进制 4 个字符全是数字时最容易被误读为十进制——养成习惯:写真值前先逐位 ×16
  2. -98 的补码不是 -99 — 取反 +1 那一步的 "+1" 不能漏
  3. 异号数相减永远不会溢出(结果绝对值 ≤ 较大的那个绝对值)

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数