进制三:进制的运算

本贴最后更新于 2189 天前,其中的信息可能已经渤澥桑田

前言

今天讲进制的运算,其实就是数字的加、减、乘、除,感觉上我们都会算,但是我们可能没有想过自己为什么会算。下面记录下进制运算的本质,并以八进制为例,说明一下进制的运算。

运算的本质

为什么我们会算 1 + 1=2、1 * 1=1?因为在我们脑子里存在着一张张的表,加法表和乘法表,我们在小学的时候就背得滚瓜烂熟,当我们需要进行十进制的运算时,我们就快速找表:在加法表中找 1 + 1,在乘法表中找 1 * 1,找到结果就返回给大脑,这时我们就知道 1 + 1=2、1 * 1=1。
所以运算的本质就是**查表**。
下面就以八进制为例,用**查表**的方式,进行进制的运算。

八进制表

首先要构造一张该进制的表,我这里用八进制。
制作这张表时,从 0 到 7,逢八进一,具体表格如下图:
八进制表

八进制加法表的制作

根据上面的八进制表,我们可以制作如下的八进制加法表,
八进制加法表
制表简单说明:

  1. 1+1 项中,在八进制表中找到 1 这一项,然后往后数一位,是 2,所以 1+1=2。
    如下图:
    1+1
  2. 1+2 项中,在八进制表中找到 1 这一项,然后往后数 2 位,是 3,所以 1+2=3。
    如下图:
    1+2
  3. 4+4 项中,在八进制表中找到 4 这一项,然后往后数 4 位,是 10,所以 4+4=10。
    如下图:
    4+4
  4. 6+5 项中,在八进制表中找到 6 这一项,然后往后数 5 位,是 13,所以 6+5=13.
    如下图:
    6+5
    其他的项类似,从八进制表中查,就可以把八进制加法表填好。

八进制乘法表的制作

根据上面得到的八进制加法表和八进制表,就可以把八进制乘法表填好。八进制乘法表如下
八进制乘法表
制表的简单说明:

  1. 1 * 1,其实就是 1 个 1,结果是 1,所以 1 * 1=1。
  2. 1 * 2,其实就是 2 个 1,2 个 1 就是 1+1,查看加法表,是 2,所以 1 * 2=2。
  3. 1 * 3,其实就是 3 个 1,3 个 1 就是 1+1+1,先算前面的 1+1,查看加法表得到 1+1=2;然后算后面的 +1,2+1,查看加法表,得到 3,所以 1+1+1=3,即 1 * 3=3。
  4. 4 * 7,其实就是 7 个 4(当然也可以是 4 个 7),7 个 4 就是 4+4+4+4+4+4+4,先算前面的 4+4,查看加法表,得到 4+4=10;
    然后算 10+4+4+4+4+4,先算 10+4,这次查八进制表,先找到 10 项,往后数 4 位,是 14,所以 10+4=14;
    然后算 14+4+4+4+4,先算前面的 14+4,查看八进制表,得到 14+4=20;
    然后算 20+4+4+4,先算前面的 20+4,查看八进制表,得到 20+4=24;
    然后算 24+4+4,先算前面的 24+4,查看八进制表,得到 24+4=30;
    然后算 30+4,查看八进制表得到 30+4=34。所以最终的结果是 34,即 4 * 7 = 34。

其他的项类似,虽然看起来很傻,但这就是本质的东西。

八进制的加法

有了八进制加法表,就可以进行更多位数的加法运算了。下面举例说明 277+333,如何通过查表,把结果查出来的。
步骤如下:

  1. 从低位(最右边)算起,7+3,查八进制加法表,得到 7+3=12,由于只能有一位数字,所以只能填 2,在旁边标记一下有进位
    如图

八进制加法步骤 1
2. 继续算下一位,7+3,继续查八进制加法表,得到 7+3=12,由于前面有一个进制,所以 12 要往后一位,查八进制表,得到 12 的下一位是 13。由于只能有一位数字,所以只能填 3,在旁边标记一下有进位。
如图:

八进制加法步骤 2
3. 继续算下一位,2+3,继续查八进制加法表,得到 2+3=5,由于前面有一个进制,所以 5 要往后一位,查八进制表,得到 5 的下一位是 6,所以填 6.
如图:

八进制加法步骤 3

通过上面的步骤,我们确实可以通过查表把 277+333 的结果查出来,是 632。

八进制的减法

我们也可以通过查表,实现八进制的减法运算。
下面的步骤是实现 236-54

  1. 从低位(最右边)算起,是 6-4,虽然没有减法表,但是加法表就可以实现减法,我去查八进制加法表中?+4=6,查到是 2+4=6,所以,6-4=2
    如图:

八进制的减法步骤 1
2. 继续算下一位,3-5,发现不够减,要向前一位借位,因为是八进制,所以借来的 1 是 10(十进制是八),10+3,查八进制表,10 往后数 3 位,是 13,所以 10+3=13。
算 13-5, 查八进制加法表,?+5=13,查到是 6+5=13,所以 13-5=6。
如图:

八进制的减法步骤 2
3. 继续算下一位,2-0,由于刚才被借了一位,所以 2 要回退一位,继续查八进制加法表,2 的前一位是 1,所以最后的结果是 1。
如图:
八进制的减法步骤 3

八进制的乘法

下面是讲通过查表实现多位八进制的乘法运算,例子:276 * 54
实现步骤:

  1. 先算 276 * 4:6 * 4,查八进制乘法表,得到 6 * 4=30,下面写 0,进 3 位;
    再算 7 * 4,查八进制乘法表,得到 7 * 4=34,因为刚才有进了 3 位,所以查八进制表,34 往后数 3 位,是 37,所以下面写 7,进 3 位;
    最后算 2 * 4,查八进制乘法表,得到 2 * 4=10,因为刚才进了 3 位,所以查八进制表,10 后面数 3 位是,13,前面没有数字了,所以直接再下面写 13。最后得到 276 * 4 =1370
    如图:

八进制的乘法步骤 1
2. 接着算 276 * 5:6 * 5,查八进制乘法表,得到 6 * 5=36,下面写 6,进 3 位;
再算 7 * 5,查八进制乘法表,得到 7 * 5=43,加上刚才进位的 3,查八进制表,43 往后数 3 位是 46,所以下面写 6,进 4 位;
最后算 2 * 5,查八进制乘法表,得到 2 * 5=12,加上刚才进位的 4,查八进制表,12 往后数 4 位,得到 16,因为前面没有数字了,所以直接在下面写 16。最后得到 276 * 5=1666。
如图:

八进制的乘法步骤 2
3. 由步骤 1、2 得到的结果,进行加法运算,求出最终的结果。从步骤 2 的结果图中可以看到位置是错开的,所以我们实际算的是 1370+16660。用上面八进制加法运算的方法(也是查表),可以得到结果 1370+16660=20250
如图:

八进制的乘法步骤 3

八进制的除法

最后讲如何通过查表实现八进制除法的运算。下面是实现 234/4 的步骤。

  1. 除法从最高位(最左边)算起,2/4,发现不够除,扩展一位,变成 23/4,够除。
    然后查八进制乘法表,看? * 4=23,发现没有,但是发现 4 * 4=20,5 * 4=24,所以取 4,下面写 20,
    然后算 23-20,也是用上面八进制减法的方法,求得结果 3,写在下面
    如图:

八进制的除法步骤 1
2. 把 4 放下来,就变成了 34/4,够除,
查八进制乘法表,找? * 4=34,找到 7 * 4=34,所以取 7。最终结果是 47
如图:
八进制的除法步骤 2

——大程序员
2018-12-24 18:35

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...