数字逻辑——数制与编码(原码,补码,反码一次搞定)

数字逻辑——数制与编码(原码,补码,反码一次搞定)

进制转换

  1. 其他进制转十进制
    多项式展开
  2. 十进制转其他进制
    取余法
    1. 整数转整数
    2. 小数转小数
  3. 其他进制转其他进制
    • 借助十进制
    • 借助二进制:2进制的各种情况,比如2进制和8进制,8机制和16机制

二进制编码

  • 数字编码
    • 有符号码
      • 原码
      • 反码
      • 补码
    • 无符号码
      • 二进制码
      • 二-十进制码
      • 其他
  • 字符编码
    • ASCII编码
    • 汉字编码

有符号码:最高位表示符号位,0表示整数,1表示符数

首先我们要明确一点:

  • 正数的原码,反码,补码相同
十进制码 原码 反码 补码
+7 0111 0111 0111
  • 负数的因为不一样,因此求反码和补码的规则是针对负数的
    反码:符号位不变,其余各位0变1,1变0。
    补码:反码加1。
十进制码 原码 反码 补码
-7 1111 1000 1001
  • 0看作是+0,-0的补码和反码用来表示最小的那个负数
十进制码 原码 反码 补码
+0 0000 0000 0000
十进制码 原码 反码 补码
-8 1000 1111 1000

补码能够将减法运算改成加法运算:
我们从以下几个角度理解

  • 这是一个转换的过程,将数字的加减运算都转化成补码的运算
  • 因此运算输入与结果都是补码
  • 因为补码与原码一一对应,所以补码结果,唯一对应一个原码
  • 原码和反码,都明确符号位,但变成补码之后,符号位在形式上与原码反码一致,但补码的符号位是数值的一部分

由上可得我们的运算步骤:

  1. 将运算的两个数的原码转化成补码。
  2. 原运算无论加减,补码运算通通变成了加法。
  3. 补码相加(只有相加),得到补码结果。
  4. 将补码结果在一一对应回原码

为了阅读与理解方便我将-8到+7的原码反码,补码表放在下面。(这也说明了n位二进制位所表示的范围)

十进制码 原码 反码 补码 十进制码 原码 反码 补码
+7 0111 0111 0111 -1 1001 1110 1111
+6 0110 0110 0110 -2 1010 1101 1110
+5 0101 0101 0101 -3 1011 1100 1101
+4 0100 0100 0100 -4 1100 1011 1100
+3 0011 0011 0011 -5 1101 1010 1011
+2 0010 0010 0010 -6 1110 1001 1010
+1 0001 0001 0001 -7 1111 1000 1001
+0 0000 0000 0000 -8 1000 1111 1000

下面举一个例子
-2 + -6 = ?

  1. 将运算的两个数的原码转化成补码。
    1110(-2)6(1010)

  2. 原运算无论加减,补码运算通通变成了加法。

  3. 补码相加(只有相加),得到补码结果。
    1110(-2)+6(1010)=1000

  4. 将补码结果在一一对应回原码
    补码1000唯一对应-8

2 + -4 = ?
0010 + 1100 = 1110
补码1110唯一对应-2

知其然,小朋友肯定会问为什么补码会有这么神奇的功效呢?

解答这个问题首先要引入模的概念。
之后更新。

你可能感兴趣的:(数字逻辑)