您的位置:首页 > 文旅 > 旅游 > 认识原码反码补码

认识原码反码补码

2024/12/23 10:24:04 来源:https://blog.csdn.net/2202_75357702/article/details/142213627  浏览:    关键词:认识原码反码补码

目录

一.何为原码反码和补码?

(1)原码

(2)反码

(3)补码

(4)总结

二.原反补之间的简单计算

(1)补码加法

(2) 补码减法

(3) 溢出问题


一.何为原码反码和补码?

(1)原码

原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。

  • 符号位:最高位(最左边的位)用于表示符号,0 表示正数,1 表示负数。
  • 数值部分:其余的位用于表示数值的绝对值。

例如,在 8 位二进制中:

  • +5 表示为:0000 0101(最左边的0表示正数)
  • -5 表示为:1000 0101(最右边的1表示负数)

(2)反码

反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

  • 正数:反码和原码一样。
  • 负数:反码为原码的按位取反。

例如,在 8 位二进制中:

  • +5 的反码:0000 0101(与原码相同)
  • -5 的反码:1111 1010(将原码的数值部分按位取反)

(3)补码

补码:反码+1就得到补码。

  • 正数:补码与原码相同。
  • 负数:负数的补码为反码加 1。

例如,在 8 位二进制中:

  • +5 的补码:0000 0101(与原码相同)
  • -5 的补码:1111 1011(反码 1111 1010 + 1 = 1111 1011

(4)总结

数值原码反码补码
+50000 01010000 01010000 0101
-51000 01011111 10101111 1011
+00000 00000000 00000000 0000
-01000 00001111 11110000 0000

二.原反补之间的简单计算

(1)补码加法

补码的加法与普通的二进制加法相同,不区分正负数。无论是正数加正数、正数加负数,还是负数加负数,计算机只需将它们的补码相加,溢出的位自动丢弃。

例子:

例子 1:正数加法

计算 5 + 3,用 8 位补码表示:

  • 5 的补码是:0000 0101
  • 3 的补码是:0000 0011
  0000 0101
+ 0000 0011
------------0000 1000   (结果为 8,正确)

例子 2:正数加负数

计算 5 + (-3),用 8 位补码表示:

  • 5 的补码是:0000 0101
  • -3 的补码是:1111 1101(原码是0000 0011)(3 的反码 1111 1100 加 1)
  0000 0101
+ 1111 1101
------------0000 0010   (结果为 2,正确)

溢出的位被自动丢弃,所以结果保持正确。

(2) 补码减法

减法可以通过将减数的补码取反(即变成负数),然后与被减数相加来实现。因此,减法实际上也是通过加法来处理的。

例子 3:正数减法计算 5 - 3,相当于 5 + (-3),用 8 位补码表示:

  • 5 的补码是:0000 0101
  • -3 的补码是:1111 1101
  0000 0101
+ 1111 1101
------------0000 0010   (结果为 2,正确)

例子 4:负数减负数

计算 -5 - (-3),相当于 -5 + 3,用 8 位补码表示:

  • -5 的补码是:1111 1011
  • 3 的补码是:0000 0011
  1111 1011
+ 0000 0011
------------1111 1110   (结果为 -126,正确)

看上面3个例子结果都是对的,为什么到这里结果就不是-2了呢?

这是因为正数他的原反补都是相同的,我们一般都是用补码来计算两个数的相加或相减,然后再将计算出来的结果转换为原码,最后计算出最终结果,我们前面三个例子计算出来的都是正数,原反补都一样,所以是正确的。

至于这第四个例子,负数得先转换原码,我在这里教大家一个快速计算由补码转换为原码的方法:
 

从最右边开始找,找到第一个1,然后在他的前一位加1就可以得到原码
对于本题:1111 1110
+      1
-------------
10000 0010(显然是-2)

补充:由于计算机中采用补码表示法进行加法运算时,可以将有符号整数的加法统一为无符号整数的加法,并且如果最高位(符号位)有进位,则忽略该进位。因此,我们可以直接进行二进制加法运算而不考虑符号位的进位。

(3) 溢出问题

在使用补码进行加减法时,可能会出现 溢出。溢出是指结果超出了可表示的范围。例如,8 位补码可以表示 -128 到 127 的数值,超过这个范围的结果会出现错误。

例子 5:溢出

计算 120 + 10,用 8 位补码表示:

  • 120 的补码是:0111 1000
  • 10 的补码是:0000 1010
  0111 1000
+ 0000 1010
------------1000 0010   (结果为 -126,溢出)

解释:因为 8 位补码最大能表示的数是 127,但实际结果 130 超出了范围,导致溢出并得到一个错误的结果(-126)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com