408考研逐题详解:2010年第13题——溢出

2010年第13题

假定有 4 个整数用 8 位补码分别表示 r1=FEH,r2=F2H,r3=90H,r4=F8H,若将运算结果存放在一个 8 位寄存器中,则下列运算中会发生溢出的是( )

A. r1×r2 \qquad B. r2×r3 \qquad C. r1×r4 \qquad D. r2×r4

解析

本题考查了补码和溢出的有关知识:

  1. 补码:是计算机中表示有符号整数的标准方法。8 位补码的最高位(MSB)为符号位:0 表示正数,1 表示负数。正数的补码是其二进制本身;负数的补码是其绝对值的二进制取反(按位取反)后加 1。8 位补码的范围是 -128(10000000)到 127(01111111)。转换十六进制补码到十进制时,需根据符号位判断正负。若符号位为 1,需取反加一得到绝对值,再添加负号。

  2. 溢出:在算术运算中,当结果超出数据类型能表示的范围时发生溢出。对于 8 位补码乘法,溢出发生在结果 < -128 或 > 127。溢出时,结果无法正确存储在 8位寄存器中,会导致精度损失或错误。乘法溢出的检测依赖于数值计算。两个 n 位补码数相乘,结果可能需要最多 2n 位表示。若真实结果超出 n 位范围,则溢出。

  3. 补码乘法溢出检测:补码乘法运算的溢出不能仅通过符号位简单判断,需计算真实结果并与范围比较。硬件中可能通过检查高位位是否全为符号位来检测,但本题可直接计算数值验证。本题中,所有运算均为负数相乘(负负得正),因此结果为正数。溢出风险主要来自乘积的绝对值过大(>127)。

题目已知整数的补码,首先将十六进制的补码转换为十进制的整数(即真值)。对每个补码的转换过程如下表所示:

变量补码(16)补码(2)符号位补码取反 → \to 加 1后的值→十进制真值(含符号位)
r1FEH1111 111010000 0001 → \to 0000 0010→2-2
r2F2H1111 001010000 1101$\to$0000 1110→14-14
r390H1001 000010110 1111$\to$0111 0000→112-112
r4F8H1111 100010000 0111$\to$0000 1000→8-8

然后按照十进制的真值,分别计算各选项的乘法结果,结果不应超过 8 位补码范围 -128 到 127,超过了则溢出。

  • A. r1 × r2 = (-2) × (-14) = 28
  • B. r2 × r3 = (-14) × (-112) = 1568
  • C. r1 × r4 = (-2) × (-8) = 16
  • D. r2 × r4 = (-14) × (-8) = 112

很显然,选项 B 的计算结果超过了 127,即其结果溢出。

本题答案:B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CS创新实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值