原码、反码、补码

48次阅读
没有评论

共计 686 个字符,预计需要花费 2 分钟才能阅读完成。

原码

原码是十进制数据的二进制表现形式,最左边是符号位,0 为正,1 为负。

最大值 127 的原码为 0111 1111

最小值 -127 原码为 1111 1111

利用原码对正数进行计算不会有问题,但如果是对负数计算,结果就出错。

  1000 0000  -0
+ 0000 0001  +1
-----------
  1000 0001  -1(正确值:+1)

反码

为了解决原码不能计算负数的问题,出现了反码。

正数的反码不变,负数的反码符号位不变,其余位取反,0 变 1,1 变 0。

十进制数字 原码 反码 补码
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111 0000 0000
-1 1000 0001 1111 1110 1111 1111
-2 1000 0010 1111 1101 1111 1110
-127 1111 1111 1000 0000 1000 0001
-128 1000 0000

反码也有弊端,在进行负数计算的时候,如果结果不跨 0,是没有问题的,但是如果结果跨 0,跟实际结果会有 1 的偏差。

  1111 1101  -2    |      1111 1101  -2
+ 0000 0010  +2    |    + 0000 0011  +3
-----------        |      ---------
  1111 1111  -0    |      0000 0000  +0(正确值:+1)

补码

虽然 + 0 和 - 0 是一样的,但 0 带符号没有任何意义,而且会有两个反码表示 0。于是补码的出现,解决了 0 的符号以及两个编码的问题,解决了负数计算跨 0 的问题。

正数的补码不变,负数的补码在其反码的基础上 +1。补码能多记录一个特殊值 -128,该数据在 1 个字节下,没有原码和反码。

计算机中的存储和计算都是以补码的形式进行的。

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2023-08-14发表,共计686字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)