乐趣区

关于计算机:为什么补码可以将减法变成加法运算

ps 如无非凡阐明,应用的是 8 位字长

两个机器数的加法运算:00001110 + 10001110 = 10011100

把这两个机器数看成是无符号数相加,那么他们的后果没有问题:

  • 00001110 -> 14
  • 10001110 -> 142
  • 10011100 -> 156

把这两个数看成是有符号数相加,这就呈现了问题:

  • 00001110 -> 14
  • 10001110 -> -14
  • 100111000

如何修改这个问题呢?如果看到 1 结尾的有符号数,取它的绝对值进行相加

  • 00001110 -> 14
  • - 00001110 -> - 14
  • 00000000 -> 0

让计算机实现这样一个转换,老本是挺大的,有什么办法能够实现这点呢?

0 在在计算机中是 00000000,那当初有一个数 1000000008 位计算机中是不是也是 0,因为它溢出了,最高位的 1 会被舍弃。

当初只有找到一个数和 00001110 相加,失去的后果是 100000000,舍弃高位不也等于 0 么。

用手动计算 100000000 - 00001110 失去 11110010

1111001000001110 之间的关系:

  1. 1000111000001110 之间的关系是互为相反数
  2. 10001110 数值位取反得 11110001
  3. 11110001 开端 + 111110010

在看补码的定义:如果符号位是 1,数值位取反,开端 + 1

这就实现了将减法运算转变成了加法运算。

退出移动版