原码、反码、补码 基础概念 和 计算方法 及 为何会有反码、补码

1、原码, 反码, 补码的基础概念和计算方法.

对于一个数, 计算机要使用必定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.html

 

1. 原码

原码就是  符号位  加上  真值的绝对值, 即用最高位表示符号, 其他位表示值. 好比若是是8位二进制:编码

[+1]原 = 0000 0001

[-1]原 = 1000 0001

 

由于最高位是符号位, 因此8位二进制数的取值范围就是:spa

[1111 1111 ~ 0111 1111]

code

[-127 ~ 127]

原码是人脑最容易理解和计算的表示方式.htm

 

 

 

2. 反码

正数的反码是其自己blog

负数的反码是在其原码的基础上, 符号位不变,其他各个位取反.get

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

可见若是一个反码表示的是负数, 人脑没法直观的看出来它的数值. 一般要将其转换成原码再计算.基础

 

 

3. 补码

正数的补码就是其自己二进制

负数的补码是在其原码的基础上, 符号位不变, 其他各位取反, 最后+1. (即在反码的基础上+1)方法

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

对于负数, 补码表示方式也是人脑没法直观看出其数值的. 一般也须要转换成原码在计算其数值.

补充:负数的补码这么记忆:符号位不变,其余的从低位开始,直到遇到第一个1以前,什么都不变,遇到第一个1后保留这个1,之后按位取反。

好比:-7[原] = 10000111

         -7[补] = 11111001

 

 

4. 计算   及   为何会有反码、补码

   有符号整数,二进制的最高位表示正负,不表示数值,最高位为0时表示正数,为1时表示负数,

   这样一来,能表示数值的就剩下(n-1)位了,

   好比 char a= -1; 那么二进制表示就为 1000 0001,

                1  表示为 00000001 ,因此除去符号位剩下的7位

                0 1111111 = 127 ,1 1111111= -127,范围应该为 -127~127 ,

   可是问题出来了,教科书上是-128~127 啊,下面就剖析一下这个惊人的奇葩。。。

 

 

 

无符号的整数  用 所有二进制位 来存储。

有符号的整数,最高位是 符号位 ,其他为表示数值。

却带来一个麻烦,当进行加法时, 1 + 1

         0000 0001

      + 0000 0001

     ———————————

        0000 0010        =   2

 

 

当 1 - 1   ( 计算机只会作加法,因此会转换为 : 1 +(-1)

         0000 0001

      + 1000 0001

    ———————————

        1000 0010        = -2        1-1 = -2  ? 明显不对

说明:用原码 作 运算是不行的。

 

解决上面的问题:发明了反码下面用 反码进行加法计算   1 + (-1)

 1  是正数,反码就是自己。

-1  是负数,反码在其原码基础上,符号位不变,其他位取反

        0000 0001

      + 1111   1110

    ——————————————————

        1111    1111       由于是反码计算,须要转换为原码: 1000 0000 = -0

说明:反码解决了相减的问题,却又带来一个问题 -0。  -0 == +0 == 0,  一个0 就够了吧。

 

为了不这个问题,又发明了补码下面用补码进行加法计算  1 + (-1)

 1  是正数,补码就是自己。

-1  是负数,补码在其原码基础上,符号位不变,其他位取反,最后 +1

        0000 0001

      + 1111   1111

    ——————————————————

       10000 0000        这里变成了9位,char 为 8位 最高位舍弃,结果为0.  ok

 

 

 

https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

https://wenku.baidu.com/view/4d9cfe8b7cd184254a353515.html

相关文章
相关标签/搜索