理解二进制原码、反码、补码

1、什么是二进制

  在说二进制以前,咱们先回想下日常咱们用的最多的十进制,1,0,50,-100,899等等这些数字咱们在熟悉不过了,牵扯到咱们的衣食住行方方面面。组成十进制的数字符号集合为{0,1,2,3,4,5,6,7,8,9}共十个元素。十进制的运算规则为:  1.“满十进一,借一当十”  2.按位权展开,第一位权为10^0, 第二位位权为10^1 ……以此类推,第N位10^(N-1),这也是就是咱们说的位置化数字系统,在数字中符号所占据的位置决定了其表示的值  例如,十进制数字698的位置化表示: 3d

698
  这里咱们看到,位权中的 基数跟进制的 符合集合个数有关,十进制有0~9共十个符号,因此十进制的位权 基数为10,基数的幂从0开始到n-1。   有了 十进制的铺垫,那么 二进制理解起来就不会那么难了。 二进制是计算机存储程序和数据的标准形式,二进制的符号集为{0,1},因此二进制只能以0、1的组合去表示数字,类比十进制规则,它的规则则是:   1.满二进一,借一当二   2.按位权展开,基数为2,第一位权为2^0, 第二位置位权为2^1 ……以此类推,第N位2^(N-1),一样遵循 位置化数字系统规则  例如,数字6的二进制表示为110:
6
   十进制如何转换 二进制呢?   十进制转换为二进制很简单,使用十进制数除以2取余数,直到商为0,所得的余数倒序排列。   例如咱们将十进制的数字8转换为二进制表示的运算过程:
8

2、原码

   存储到计算机之中的数据都被转换为了二进制形式,可是还有问题须要解决:如何存储数字的符号?    若是不考虑数字的符号,对于n位存储单元,所能存储的范围为[0~2^n-1],例如n=4时,它能表示的范围就是0 ~ 15。    但咱们都知道,数字有正数、负数之分,所以原码表示法规定了,在n位的存储单元中,使用最左1个二进制位表示符号0表示正1表示负其他位置表示数字的绝对值。    例如n=4的存储单元,所能存储的无符号数范围为[0~2^n-1],最左位当作符号位置后,能够仅用剩余3位表示数字的绝对值。 cdn

原码表示
   从上图咱们能够看到n=4位的存储单元,使用原码表示法时,被分为了两个相等的子范围便是正整数0000 ~ 0111和负整数1000 ~ 1111。    因此总结起来 原码表示法,n位的存储单元可存储数字范围为-(2^n-1 - 1)至 +(2^n-1 - 1),而且原码表示法中有 两个0+0-0

3、反码

   原码在计算机存储整数中并不经常使用,计算机使用二进制补码来表示n位存储单元中的有符号整数反码是由原码转换为补码的中间形式,该运算能够应用到任何整数,不管是正的仍是是负的,进行反码运算时,最左边符号位保持不变,当此数字为负数时,其绝对值位各位求反;正数反码为这个数自己    例如n=4位存储单位中数字3的反码:
blog

3的反码
   -3的反码:
-3

4、补码

   几乎全部计算机都使用使用二进制补码来表示n位存储单元中的有符号整数。那么如何得到一个数补码,规则很简单:    正数的补码为其自己;    负数的补码为其反码在加上1获得的结果图片

 例如在4位的存储单位中,-5的补码表示: it

在这里插入图片描述

例如在n=4位的存储单元中,还原1 0 1 1所表示的整数: io

在这里插入图片描述

 因此总结起来,计算机以二进制补码存储正数遵循如下步骤:   ①将整数转换为n位的二进数   ②若是整数是正数或零,以其原样存储,若是是负数,计算机取其补码。  而从二进制补码还原为整数,遵循以下步骤:    ①若是最左位是1,计算机取其补码。若是是0,不进行任何操做    ②将该整数转换为十进制class

4、为何使用补码

   计算机采用二进制补码表示的优势在于加法和减法之间没有区别,当遇到减法运算时,计算机能够简单的把它转变为加法,只须要求为第二个数求二进制的补码便可这样符号位就能参与运算,下降了计算机逻辑电路复杂度。   例如在n=4位存储单元,计算机计算5-3时,能够按照5+(-3)处理 二进制

补码计算
获得结果0010按照补码->十进制整数转换规则,结果是2   补充:二进制补码加法与十进制加法同样,列与列相加,满二进一,若是有进位,就加到下一列,可是最后一列进位要舍弃(图中的红色标识的1)。
相关文章
相关标签/搜索