📜  补码与反向补码 (1)

📅  最后修改于: 2023-12-03 15:27:52.952000             🧑  作者: Mango

补码与反向补码

1. 补码

计算机内部使用的是二进制数字来表示正负数,但是二进制数是没有符号的,所以需要补码来表示正负数。

1.1 原码

原码是二进制表示法中最简单的一种,其中最高位表示符号,0表示正数,1表示负数,其余位表示数值大小。但是原码有一个很大的问题,就是加减法运算很复杂,需要先判断符号位,再进行运算。

1.2 反码

反码是为了解决原码的加减法问题而出现的。正数的反码与原码相同,负数的反码则是在原码的基础上,符号位不变,其他位全部取反。

例如:

  • +7的原码是00000111,反码也是00000111;
  • -7的原码是10000111,反码是11111000。

由此可知,反码有一个很大的问题,就是存在+0和-0两个数,这显然会影响到后面的运算。

1.3 补码

由于反码存在+0和-0,所以需要一个新的表示方法,那就是补码。计算机中,负数使用补码表示,正数的原码和补码相同。补码的计算方法如下:

  • 对于正数,补码等于原码;
  • 对于负数,补码等于反码加1。

例如:

  • +7的原码是00000111,补码也是00000111;
  • -7的原码是10000111,反码是11111000,补码是11111001。

补码的好处在于,在加减法运算时,无需再判断符号位,只需要进行二进制运算,最后得到的结果再转化为原码即可。

2. 反向补码

反向补码是指对于一个补码进行逆运算的结果。例如对于-7的补码11111001,进行逆运算可以得到对应的反向补码00000111。

反向补码的计算方法如下:

  • 对于正数,反向补码等于原码;
  • 对于负数,反向补码等于反码加1。

与补码不同的是,反向补码是用来进行除法运算的。在计算机中,除法运算并不是用除数去除以被除数,而是用被除数去除以除数的反向补码。

例如:计算-7/3的结果,首先将-7的补码11111001转化为反向补码00000111,然后将除数3转化为反向补码11111101,进行除法运算得到商的反向补码11111011,再将反向补码11111011转化为原码10000101,所以-7/3的结果为-2。

反向补码并不常用,所以在此不作过多介绍。

3. 总结

补码是计算机内部表示正负数的一种方式,优点是简化了加减法运算,不需要判断符号位。反向补码则是用来进行除法运算的,计算机中使用不多,在此不作过多介绍。