前言
今天讲进制的运算,其实就是数字的加、减、乘、除,感觉上我们都会算,但是我们可能没有想过自己为什么会算。下面记录下进制运算的本质,并以八进制为例,说明一下进制的运算。
运算的本质
为什么我们会算 1 + 1=2、1 * 1=1?因为在我们脑子里存在着一张张的表,加法表和乘法表,我们在小学的时候就背得滚瓜烂熟,当我们需要进行十进制的运算时,我们就快速找表:在加法表中找 1 + 1,在乘法表中找 1 * 1,找到结果就返回给大脑,这时我们就知道 1 + 1=2、1 * 1=1。
所以运算的本质就是**查表**。
下面就以八进制为例,用**查表**的方式,进行进制的运算。
八进制表
首先要构造一张该进制的表,我这里用八进制。
制作这张表时,从 0 到 7,逢八进一,具体表格如下图:
八进制加法表的制作
根据上面的八进制表,我们可以制作如下的八进制加法表,
制表简单说明:
- 1+1 项中,在八进制表中找到 1 这一项,然后往后数一位,是 2,所以 1+1=2。
如下图:
- 1+2 项中,在八进制表中找到 1 这一项,然后往后数 2 位,是 3,所以 1+2=3。
如下图:
- 4+4 项中,在八进制表中找到 4 这一项,然后往后数 4 位,是 10,所以 4+4=10。
如下图:
- 6+5 项中,在八进制表中找到 6 这一项,然后往后数 5 位,是 13,所以 6+5=13.
如下图:
其他的项类似,从八进制表中查,就可以把八进制加法表填好。
八进制乘法表的制作
根据上面得到的八进制加法表和八进制表,就可以把八进制乘法表填好。八进制乘法表如下
制表的简单说明:
- 1 * 1,其实就是 1 个 1,结果是 1,所以 1 * 1=1。
- 1 * 2,其实就是 2 个 1,2 个 1 就是 1+1,查看加法表,是 2,所以 1 * 2=2。
- 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 * 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,如何通过查表,把结果查出来的。
步骤如下:
- 从低位(最右边)算起,7+3,查八进制加法表,得到 7+3=12,由于只能有一位数字,所以只能填 2,在旁边标记一下有进位
如图
2. 继续算下一位,7+3,继续查八进制加法表,得到 7+3=12,由于前面有一个进制,所以 12 要往后一位,查八进制表,得到 12 的下一位是 13。由于只能有一位数字,所以只能填 3,在旁边标记一下有进位。
如图:
3. 继续算下一位,2+3,继续查八进制加法表,得到 2+3=5,由于前面有一个进制,所以 5 要往后一位,查八进制表,得到 5 的下一位是 6,所以填 6.
如图:
通过上面的步骤,我们确实可以通过查表把 277+333 的结果查出来,是 632。
八进制的减法
我们也可以通过查表,实现八进制的减法运算。
下面的步骤是实现 236-54
- 从低位(最右边)算起,是 6-4,虽然没有减法表,但是加法表就可以实现减法,我去查八进制加法表中?+4=6,查到是 2+4=6,所以,6-4=2
如图:
2. 继续算下一位,3-5,发现不够减,要向前一位借位,因为是八进制,所以借来的 1 是 10(十进制是八),10+3,查八进制表,10 往后数 3 位,是 13,所以 10+3=13。
算 13-5, 查八进制加法表,?+5=13,查到是 6+5=13,所以 13-5=6。
如图:
3. 继续算下一位,2-0,由于刚才被借了一位,所以 2 要回退一位,继续查八进制加法表,2 的前一位是 1,所以最后的结果是 1。
如图:
八进制的乘法
下面是讲通过查表实现多位八进制的乘法运算,例子:276 * 54
实现步骤:
- 先算 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
如图:
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。
如图:
3. 由步骤 1、2 得到的结果,进行加法运算,求出最终的结果。从步骤 2 的结果图中可以看到位置是错开的,所以我们实际算的是 1370+16660。用上面八进制加法运算的方法(也是查表),可以得到结果 1370+16660=20250
如图:
八进制的除法
最后讲如何通过查表实现八进制除法的运算。下面是实现 234/4 的步骤。
- 除法从最高位(最左边)算起,2/4,发现不够除,扩展一位,变成 23/4,够除。
然后查八进制乘法表,看? * 4=23,发现没有,但是发现 4 * 4=20,5 * 4=24,所以取 4,下面写 20,
然后算 23-20,也是用上面八进制减法的方法,求得结果 3,写在下面
如图:
2. 把 4 放下来,就变成了 34/4,够除,
查八进制乘法表,找? * 4=34,找到 7 * 4=34,所以取 7。最终结果是 47
如图:
——大程序员
2018-12-24 18:35
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于