Chapter 9 Arithmetic(2)
Chapter 9 Arithmetic(2)
这一章是很难的,不过我打的就是精锐。😎
Contents of This Lecture
Topic (主题) | Description (描述) |
---|---|
Addition of 1-bit Positive Numbers (1位正数相加) | Adding two 1-bit positive numbers. |
Addition of n-bit Signed Numbers (n位带符号数相加) | Adding two n-bit signed numbers (both positive and negative). The process involves considering the sign bit and performing carry operations for the sum. |
Subtraction of n-bit Signed Numbers (n位带符号数相减) | Subtracting two n-bit signed numbers, which can be done using two's complement or other methods depending on the representation (signed-magnitude, one's complement, etc.). |
n位带符号数相加
n位带符号数相加的规则(在二进制补码表示下)
- 为了将两个数相加,直接将它们的n位二进制表示相加,并且将符号位(最高位)视为普通的比特位,忽略来自符号位的进位。
- 只要结果位于范围 \(-2^{n-1}\) 到 \(+2^{n-1} - 1\) 之间,二进制补码表示的和是代数正确的。
4位带符号数相加的例子
- 参考教材第14页图1.6 (a)-(d)进行操作。
4位带符号数相加的例子
算术溢出 (Arithmetic Overflow)
- 溢出定义: 算术运算的结果超出了可表示的范围。对于有符号数来说,溢出通常发生在结果超出了其表示范围,导致无法准确表示。
- 充要条件:
如果两个数相加,它们有相同的符号,则当且仅当结果的符号与两个加数都相反时,才会发生溢出。
- 具体来说:
- 如果两个加数都是正数,且结果是负数,则发生溢出。
- 如果两个加数都是负数,且结果是正数,则也发生溢出。
- 具体来说:
• 注意:
- 符号位的进位信号不能作为溢出的充分指标:
在加法操作中,符号位的进位信号(Carry-out)并不是判断溢出的充分条件。溢出可以发生,且无论是否有进位信号,都可能发生溢出。
- 换句话说,溢出不仅仅是通过检查符号位的进位信号来判断的,因为即使没有进位信号,溢出仍然可能发生。
n 位有符号数的减法
• n 位有符号数的减法规则(在有符号 2 的补码表示下)
减法规则:
要计算两个数 $ X $ 和 $ Y $ 的差,即 $ X - Y $,首先求 $ Y $ 的 2 的补码,然后将其加到 $ X $ 上,按照加法规则执行。结果的正确性:
如果结果在 $ -2^{n-1} $ 到 $ +2^{n-1} - 1 $ 的范围内,结果将是 2 的补码表示系统中的代数正确值。减法的本质:
$ X - Y = X + (-Y) $,即可以通过将 $ Y $ 取 2 的补码后与 $ X $ 相加来进行减法。
• 2 的补码操作(取负操作)
- 步骤:
- 对整数的每一位(包括符号位)取布尔反码,即将每个 1 变为 0,每个 0 变为 1。
- 将反码结果视为无符号二进制数,加 1。
- 示例:
- 假设 $ Y = 6 $,其 2 的补码表示为 $ 0110 $,求 $ -Y $ 的 2 的补码表示。
- 解:
- $ Y = 0110 $,取反得到 $ 1001 $,然后加 1,得到 $ 1010 $,即 $ -Y = 1010 $。
• 4 位有符号数的减法示例
• 4 位有符号数减法(续)
- 结论:
- 图 1.6(第 14 页)中的示例表明,两个 n 位的有符号数可以通过 n 位二进制加法来相加,并且符号位和其他位一样处理。
- 换句话说,设计用于加法无符号二进制数的逻辑电路,也可以用来加法处理 2 的补码表示的有符号数。
• 溢出示例
问题:
$ X = 6, Y = -7 $,求 $ X - Y $ 的结果。- 解:
- $ X = 6 = 0110 $
- $ Y = -7 = 1001 $
- $ -Y = 0111 $(取反并加 1)
运算如下:
1
2
3
40 1 1 0 (X = 6)
+ 0 1 1 1 (-Y = 7)
-----------
1 1 0 1 = -3 (溢出)结果为 -3,发生了溢出(overflow)。
- 解:
习题
• 假设 $ X $ 和 $ Y $ 是两个 8 位有符号 2 的补码数,分别为 01011110 和 11001010。计算 $ X + Y $ 的结果是什么?
- 选项:
- A. 00101000
- B. 10010100
- C. 01000100
- D. 00011100
• 假设 $ X $ 和 $ Y $ 是两个 8 位有符号 2 的补码数,分别为 01011110 和 11001010。计算 $ X - Y $ 的结果是什么?
- 选项:
- A. 00101000
- B. 10010100
- C. 01000100
- D. 溢出 (overflow)
• 判断对错:在 2 的补码二进制算术中,从一个负整数中减去另一个负整数可能会导致溢出。
解答与分析
第一题:$ X + Y $ 的结果
- $ X = 01011110 $,转换为十进制是 $ 94 $。
- $ Y = 11001010 $,转换为十进制是 $ -54 $(因为符号位是 1,表示负数)。
计算 $ X + Y = 94 + (-54) = 40 $,然后将结果转回 8 位二进制,得 $ 00101000 $。
所以,正确答案是 A. 00101000。
第二题:$ X - Y $ 的结果
- 我们已经知道 $ X = 94 $ 和 $ Y = -54 $。
- $ X - Y = 94 - (-54) = 94 + 54 = 148 $。
将 148 转换为 8 位二进制表示,得到 $ 10010100 $。
第三题:从一个负整数中减去另一个负整数可能会导致溢出?
因此,这个说法是错误的,从一个负整数中减去另一个负整数不可能发生溢出。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Totoroの旅!
评论