乐趣区

关于计算机基础:补码加减法运算和溢出判断

在二进制计算中,如果计算结果超过计算机的位数,就会产生溢出。

设机器字长为 8 位(包含一位符号位),A = 15B = -24C = 124,求 [A+B]补 [A-B] 补[A+C]补 [B-C] 补

将十进制数转换成二进制机器数

  • [A]原 = 00001111,[A]补 = 00001111
  • [B]原 = 10011000,[B]补 = 11101000
  • [C]原 = 01111100,[C]补 = 01111100

加法和减法运算

加法运算,能够间接把两个有符号数的补码进行相加,计算第一个式子:[A+B]补 = [A]补 + [B]补 = 00001111 + 11101000 = 11110111,失去 [A+B]补 = 11110111 转换成真值为 -9,和用十进制计算 A+B 的后果一样。

减法运算,是先把它变成加法运算,而后用补码的进行加法运算,计算第二个式子:[A-B]补 = [A]补 + [-B]补 = 00001111 + 00011000 = 00100111,失去 [A-B]补 = 00100111 转换成真值为 39,和用十进制计算 A-B 的后果是一样的。

加法运算和减法运算在计算机外部都是加法运算,只是对于减法运算来说,多了一个求相反数的电路:B -> -B

溢出判断

两个机器数,进行了加减运算后,失去的后果和十进制数加减运算后的后果不统一,这就造成了溢出

  • [A+C]补 = [A]补 + [C]补 = 00001111 + 01111100 = 10001011,真值是 -11,十进制 A+C 真值是 139
  • [B-C]补 = [B]补 + [-C]补 = 11101000 + 10000100 = 01101100,真值是 108,十进制 B-C 真值是 -148

溢出的几种判断形式:

  • 采纳一位符号位
  • 采纳一位符号位和数据位进位
  • 采纳双符号位

采纳一位符号位

假如被加数的符号位为 As,加数的符号位为 Bs,后果位的符号位为 Ss

将符号位进行异或运算:V = AsBs!Ss ⊕ !As!BsSs

  • 异或运算的原理是雷同失去 0,不同失去 1

    • 如果 V = 0,示意无溢出
    • 如果 V = 1,示意有溢出

采纳一位符号位,依据数值位和符号位的进位状况判断溢出

假如数值位的进位为C1,符号位最高位进位为 Cs

将符号位进行异或运算:V = C1 ⊕ CS

  • 异或运算的原理是雷同失去 0,不同失去 1

    • 如果 V = 0,示意无溢出
    • 如果 V = 1,示意有溢出

采纳双符号位

存储在计算机外部的二进制数是正确的数据,也就是说不存在溢出的行为,所以采纳一位符号位即可,比方 00001111 或者 10001111

双符号位就是在单符号位的根底上在增加一位符号位,两位符号位别离记为:S1S2

将符号位进行异或运算:V = S1 ⊕ S2

  • 异或运算的原理是雷同失去 0,不同失去 1

    • 如果 V = 0,示意无溢出
    • 如果 V = 1,示意有溢出

采纳双符号位的移位运算

  • 低位符号位参加移位,高位符号位代表真正的符号
  • 应用双符号位的数个别是补码
退出移动版