原码、反码、补码

教程 · 2023-08-14 · 313 人浏览

原码

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

最大值127的原码为0111 1111

最小值-127原码为1111 1111

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

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

反码

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

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

十进制数字原码反码补码
+00000 00000000 00000000 0000
-01000 00001111 11110000 0000
-11000 00011111 11101111 1111
-21000 00101111 11011111 1110
............
-1271111 11111000 00001000 0001
-1281000 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个字节下,没有原码和反码。

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

知识
Theme Jasmine by Kent Liao