原码、反码和补码

来源:互联网 发布:瓦尔登湖 知乎 译本 编辑:程序博客网 时间:2024/05/17 00:07

 为什么有原码、反码和补码?

因为 +0和-0他们的补码是一样的:

正数的原码、反码和补码都是一样的;

1原码

将最高位作为符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示)。

负数的原码为高位为1,其他为相应的数;

+7 原码0000 0111

-7原码1000 0111

+0的原码为:             0000 0000

 -0的原码为:             1000 0000

 

2反码

           一个数如果为正,则它的反码与原码相同;一个数如果为负,则符号位为1,其余各位是对原码取反。

            为了简单起见,我们用1个字节来表示一个整数。

            +7的反码为:  0000 0111

             -7的反码为:  1111 1000

           +0的反码为:    0000 0000

            -0的反码为:    1111 1111

 

3 补码:

反码+1

利用溢出,我们可以将减法变成加法。

    对于十进制数,如果从9得到结果5,可以用减法:

         9-4=5

      因为4+6=10,我们将6作为4的补数,将上式的减法改写为加法:

         9+6=15

      去掉高位1(也就是减去10),得到结果5。

      对于16进制数,如果从C得到结果5,可以用减法:

         C-7=5

      因为7+9=16,我们将9作为7的补数,将上式的减法改写为加法:

         C+9=15

      去掉高位1(也就是减去16),得到结果5。

 

+0的补码为:    0000 0000

            -0的补码为:    1111 1111+1=0000 0000

 

 

已知一个负数的补码,将其转换为十进制数,步骤:

      1、先对各位取反;

      2、将其转换为十进制数;

      3、加上负号,再减去1。

      例如:

      11111010,最高位为1,是负数,先对各位取反得00000101,转换为十进制数得5,加上负号得-5,再减1得-6。