Skip to content

2023年 408 计算机组成原理 第 16 题

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

题目

已知 x、y 为 int 类型,当 x = 100,y = 200 时,执行 x − y 指令得到的溢出标志 OF 和借位标志 CF 分别为 0、1,那么当 x = 10,y = −20 时,执行该指令得到的 OF 和 CF 分别是( )。

错因

A

只看了"有符号"角度:,结果在 int 范围内 → OF = 0 ✓;然后默认 CF 也为 0,理由"两个数都不大,没什么借位"。但 CF 是按无符号视角判断的—— 在 32 位无符号下是 4 294 967 276,远大于 ,做无符号减法必产生借位,CF = 1。错在没切换到无符号视角看 CF。

C

把 OF 当成 CF、CF 当成 OF。 在有符号 int 里没有溢出(OF 应为 0),在无符号视角下产生借位(CF 应为 1)。把两者写反就是 C。常见原因:记忆里"OF/CF 哪个是符号哪个是无符号"模糊不清。

D

把 OF 也判成 1。可能基于"有符号 −20 减出来的结果好像很大"或者"加法符号位变化"硬套了 OF 公式。但 OF 的判定有明确条件:两个加数符号相同、和的符号与加数相反才溢出。 等价 ,两加数都正、和也是正,没有溢出,OF = 0。

总解析

先理顺两个标志位的语义

标志视角判定
OF(Overflow Flag)有符号加法:两加数同号、和的符号相反 → OF = 1。减法 看作 同样判
CF(Carry/Borrow Flag)无符号减法:被减数(无符号)< 减数(无符号),需要借位 → CF = 1

用题目给的样例校验定义:x = 100,y = 200,x − y。

  • 有符号:,结果在 int 范围内 → OF = 0 ✓
  • 无符号:100 < 200,需要借位 → CF = 1 ✓

两者都对得上,确认这台机器的标志位语义就是上面那张表。

代入 x = 10, y = −20

OF(有符号视角)

把减法转成加法 :两加数都是正数(同号),和 30 也是正数(同号)→ 没有溢出,OF = 0。

CF(无符号视角) 的 32 位补码 = 0xFFFF_FFEC,无符号 = ,是个非常大的正数。

显然要借位 → CF = 1。

最终答案是 B(OF = 0, CF = 1)

记忆口诀"OF 看符号,CF 看无符号"——这俩标志位看的是同一份二进制位,但解释方式不同,OF 关心补码的有符号溢出,CF 关心无符号下的借位/进位。

最后更新:

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

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