计算机体系结构基础知识介绍之简单回顾原码反码补码

原码

最高位为符号位,0表示正数,1表示负数。

例如:
X = 0b11 (3),四比特表示原码 = 0011(3) ;

X = - 0b11(-3) ,四比特表示原码 = 1011(11) ;

反码

最高位为符号位,0表示正数,1表示负数。

正数的反码等于本身,负数的反码除符号位外,各位取反:

例如:
X = 0b11 (3),四比特表示原码 = 0011(3),对应反码为 = 0011(3) ;

X = - 0b11(-3) ,四比特表示原码 = 1011(11),对应反码为 = 1100(12)  ;

补码是一种用来表示有符号整数的方法,它可以使得加法和减法运算更加简单和统一。负数的补码,是能够和其相反数相加通过溢出从而使计算机内计算结果变为0的二进制码。

补码的表示方法是:

  • 正数的补码就是其本身;
  • 负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+ 1。 (也即在反码的基础上+ 1)

为了方便说明,我们假设使用 8 位二进制数来表示整数。那么,我们可以用下面的例子来说明正数和负数的补码:

  • +5 的原码和补码都是 00000101;
  • -5 的原码是 10000101,其反码是 11111010,其补码是在反码的基础上加 1,即 11111011;
  • +127 的原码和补码都是 01111111;
  • -127 的原码是 10000001,其反码是 11111110,其补码是在反码的基础上加 1,即 11111111;
  • +0 的原码和补码都是 00000000;
  • -0 的原码是 10000000,其反码是 11111111,其补码是在反码的基础上加 1,即 00000000。

使用补码的好处有以下几点:

  • 避免了多种表示方法。使用原码或反码来表示负数时,会出现两种表示 0 的方法:00000000 和 10000000。这样会造成混淆和浪费。而使用补码时,只有一种表示 0 的方法:00000000。
  • 简化了加法和减法运算。使用原码或反码来进行运算时,需要考虑符号位和进位的问题,并且对于不同符号的数还要采用不同的规则。而使用补码进行运算时,只需要按位相加,然后忽略最高位的进位,就可以得到正确的结果。这样可以简化电路设计和计算机指令。
  • 利用了模运算的性质。模运算是指一个计量系统的计数范围,例如时钟的计量范围是 0~11,模为 12。在模运算中,任何有模的计量器都可以化减法为加法运算。例如,在 12 为模的计时系统里,加 10 和减 2 的效果是一样的,因为它们相加等于模。对于二进制系统,模为 2^n ,其中 n 是二进制数的位数。例如,在 8 位二进制系统中,模为 256。那么,-a 的补码就相当于 mod-a ,也就是 256-a 。这样,在进行 a-b 的运算时,就可以用 a+(-b) 的补码来代替。

猜你喜欢

转载自blog.csdn.net/qq_52505851/article/details/131961597