漫谈进制值的读取与转换---数值的另一种读法和九九乘法表协议

数位转换的意思是数字的位存储之间的转换,我们平时的生活中或者是电脑世界里,经常会用到数字和进制的概念。特别是曾经我学的一门课程叫汇编语言,有一节专门是进制之间的转换,比如二进制、八进制、十进制、十六进制之间的相互转换。我曾经想过一个问题,为什么十进制的123的值为什么恰恰是123呢?为什么八进制的123的值是83呢?十进制为什么这么巧就能表达出数字的值呢?可能是因为我们常用的十进制,所以往往理解一个值都会转换为十进制来比较。
进制读数
在进制转换之间十六进制转换为八进制,我们通常会用到两个桥梁(或者中介进制),一个是二进制,一个是十进制。二进制是把十六进制拆分为四位来表达十六进制,再合并成八进制,这样就得到一个八进制的数字;十进制是把十六进制转换为十进制,再转换为八进制,如十六进制:123,先转为十进制1乘以16的二次方+2乘以十六的一次方+3x16的零次方,最后得到一个十进制的数字,然后再用这个十进制除以8,直到商比8小,得到一个余数,然后把余数和以前的商连到一块,得到一个八进制,这是教科书的算法。

我们所用到的次方的原理是读某位上的值,然后各个位的值相加,得到一个值。那么除了这种教科书式的算法,还有没有其他的方法呢?首先我们用一个现实生活中的例子来解释一下存在的其他方式。

又到了一年一度的秋收,有一个种苹果的农民家联系了一个收货的客户,准备把他们的苹果装车,拿了很多的装苹果的筐子。客户说他们一个筐子能装20个苹果,一车能装20个箱子,最后算一下就知道有多少个苹果了,好的苹果按照个数卖,不称斤轮两。农民了解清楚之后就让客户去他们地里装车。到了清算的时候好苹果一共装了一车还有8框,手里攥了4个。让农民算一算一共有多少个苹果。于是农民把他小学三年级的儿子叫来了盯着客户算账,(注意:那个儿子没有学过次方)。客户算账的时候是这样解释的:一筐一共可以装20个苹果,一车共能装20框,现在装了1车8框和4个,按照20进制可以表示为184,我们把这个转为10进制就知道是多少个苹果了。1乘以20的平方加上8乘以20的一次方加上4,一共564。这个六年级的小学生看不懂,于是请了一个中学生以两个苹果作为报酬,给看看解一下这个二次方的算式。最后算出的结果也是这个数字,没问题,这次交易成功。

这件事情结束之后,小学生一直觉得这个客户有点蠢:“为什么要弄成什么进制的形式算呢?为什么不用乘法算呢?还好我学了乘法口诀,在心里算了一遍,跟他们的结果一样。一车有20框,那么加上多余的8框算下来一共是28框,一筐装20个,那么28框就是560个,加上多余的4个就是564个,没错,他们也是算对了。是不是进制值的溢出和苹果装框,框装车一样呢?”因为这件事情对进制的理解和推理,这个小学生对于数学更加感兴趣了。

通过这次交易,我们看到了一个数学基础的概念,表达一个值是按照进制进行位存储,位溢出的时候上位进一,这也是算盘的基本原理。也许我们算盘往往是以十进制进行计算的,所以在读值的时候往往就是按照位数读出来就是值了。但是如果用八进制在算盘上进行计算,结果要把得到的数字转换为10进制的值该怎么算呢?

比如八进制的124。这时我们就要像这位小学生一样,把124的高位一步步的转换为更低位,然后运用乘法就可以算了。我们要有本位、上位、下位这个概念,比如把这个1转换一下,1的上位都是0,下位是2,这个时候我们把本位转换为下位就是1x8+2,结果是10。这是一个溢出的结果,不过我们这个时候是取值读值而不是存储值,不溢出才有问题。第二位的值是10,转换为下位,就是10x8+4,结果是84,计算结束。我们用教课书的算法是:1乘以8的2次方,加上2乘以8的1次方,加上4x8的0次方,结果为84。这就是数位转换,将高位逐渐转换为低位,最后得出一个末位的结果,就是一个数值。数位转换是以数学中的乘法和进制这两个公理,进行降位得到的值。

看到这可能有些人发现了一个蹊跷的事情,为什么数位转换到了某个位表达成了十进制?不是说好的八进制转换为十进制吗?为什么每一次转换的时候都成了十进制的值了呢?那我要是十二进制转换为八进制,是不是还要借助十进制这个桥(或者成为中介进制)才能转换呢?当然不用,从上面再读一遍,之所以八进制转换为10进制的过程中在转换的过程中就已经成为十进制了,是因为我们用十进制的九九乘法表所致。

在实际过河的时候我们既可以从桥上过,也可以划船,也可以潜水,主要看你选择哪种,进制转换也是一样。

如果我们不用十进制的九九乘法表,而是用八进制的七七乘法表结果就是另外的一个值,然后在转换为十进制即可。当然,就像十进制123的值就是123一样,八进制的124最后得到八进制的值依然是124,用某进制的乘法表进行数位转换实际是在做无用功。

接下来我想了一下八进制的七七乘法表应该是这么样的呢?一七得七,二七一十六,三七二十五,四七三十四…7乘以10得70,、7乘以11得77,、7乘以12得106…

我们看接下来的故事,那个收苹果的客户已经把“去年”库存的苹果开始清仓了,现在来了一个批发商开始要这些苹果。要求是需要包装这些苹果,当做礼品来售卖。定制了一种只能装8个苹果的箱子,“去年”手里攥的那4个已经吃了,剩下的是20进制的180了,现在如果装成8个一箱的能装多少箱?就这个问题开始计算。这个以前的客户现在是卖主的人又开始了八进制的七七乘法表计算20进制的180了。将1转换为下位加上下位的数值,然后再往下位转换,加上该位的值,直到末位:(1x24+10)x24+0=34x24(七七乘法表)=1060(8进制),8个一箱一共有1060(8进制)/10(8进制) = 106(8进制)=70(10进制)。上述20进制的180转换为10进制为:(1x20+8)x20+0=28x20+0(九九乘法表)=560(十进制),装成八个一箱一共560/8=70。两种方法最终结果相同,互相印证。

在这里插入图片描述
这个厂商用的七七乘法表计算,最后结论是70箱。进制转换以不同的乘法表替换了以往的进制转换除法取余的方式,也替代了以九九乘法表为中心的进制转换中转进制。

关于数位转换和进制转换的介绍就到这里了,那么下面我们就要考虑一个问题。我们说既然有这么多种方法可以进行数值计算,那么到底哪种的效率更高呢?这才是关键问题,往往效率低的一种方式就会被时间逐渐的排挤掉,直到从人们的脑海中消失,历史上很多事情就是这样的。是不是这种数位转换的方式是早期被淘汰掉的呢?我不知道,也没有查过什么资料,我们不妨先比较一下效率。

以十进制的124做例子,用教科书的做法,最高位做了两次乘法,十位上做了一次乘法,个位一次乘法。一共四次乘法两次加法;数位转换算法做了两次加法和两次乘法,基本上是(最高次方-1)次乘法和(最高次方-1)次加法。这样看我们就知道哪个的用的乘法多了。

或者以另外一种方式计算,所有的乘法实际上是一种简单的协议方式来约定两个数之积,乘法的基础是加法,比如4x5=4+4+4+4+4,加了五次。我们说1+1=2的时候,等号左边与右边相等,说明两者之间是一种转换关系,从一种情境转换为另外一种情境,叫数值合并,当拆分的时候他们还要转换回去。因此《九九乘法表》的实质是十进制数值转换的一个协议,应用范围是十进制的加法运算。
在这里插入图片描述
既然乘法是协议,我们就把乘法全部以加法的形式表示,这样更能接近数学的本意。继续以十进制的124举例,转换表达式为:1x10x10 + 2x10+1x4,根据算数符号的优先级进行加法拆分,一共做了36次加法运算;数位转换的表达式为(1x10+2)x10+4,根据优先级进行加法拆分,一共做了22次加法运算。数位转换的方式同样效率高。或者我们继续举例,十进制的22呢?谁是什么结果?高次方(传统算法)的方法和数位转换方法执行加法的次数依次是13次和11次。

2248呢?高次方(传统算法)的表达式是2x10x10x10+2x10x10+4x10+1x8,一共30+1+20+1+10+1+8=71次加法运算;数位转换的结果是((2x10+2)x10+4)x10+8,一共33次加法运算。比较三次运算结果,高次方(传统算法)运算分别进行的加法运算的次数数值从小到大依次为13、36、71,而数位转换进行加法的次数依次为11、22、33,无论进行的乘法次数和加法次数都小于高次方运算(传统算法)。因此,数位转换的方式进行数值运算效率会更高。

至于除了运算之外,数位转换同样可以结合进制乘法表进行进制之间的转换,效率会是提高还是降低呢?依照进制乘法表这种协议进行推算即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值