因为mix系统是一个 任意进制 的数学系统,它的很多运算不能直接的投影到我们所熟悉的十进制,或者是二进制里进行运算。
简述一下啊mix里的word的概念。mix里的字节不同于我们现在所习惯的byte,那种一个byte包含8个二进制的bit的结构。在mix里,一个词(word)包含一个符号位(非正即负)和五个字节(byte)。每个byte至少有64个不同的值(同时,它最多不应超过100,当然这并不重要。)。而一个byte的实现则取决于系统所使用的具体进制。譬如说,如果这是一个二进制系统,那么一个byte有6个bit。(注意:这里的6是唯一的。因为前面提到过,高老师说一个字节的值不应超过100种。我觉得这样的规定,只是为了让每一种进制下的计算机拥有相同的表示。不过,如果将来有了5进制的系统怎么办呢……或许高老师的意思是,能表示64个不同值的最少位数)如果是量子计算机使用三进制的话,那么一个byte就应该包含4个bit。(这很好理解,因为3^4=81 > 64。)
在这里,一个byte到底是由几个怎样的bit组成,是不被我们关心的。我们关心的是:只要它能够表达至少64个不同的值就可以了。一切超过64的值的使用,都是危险和不确定的。为了更容易的理解mix里的字节系统,我是这样理解的:一个word是一个有符号的五位数。它的进制是一个byte的容量,我们可以假设为64或者81,其实,就算是65或者80也一样。
好了有了以上理解,我们可以对那个神奇的除法进行分析了。首先是题目(说明一下,方括号里的表明这是一个整体)
rA before : [__ __ __ __ 0]
rX before : [1235] [0] [3] [1]
Cell 1000 : [0] [0] [0] [2] [0]
———DIV 1000————
我们先把这个三个word转化成64进制的表达形式:
rA before : 00 00 00 00 00
rX before : 19 19 00 03 01
Cell 1000 : 00 00 00 02 00
———DIV 1000————
好了,是不是有看HEX代码的感觉了?说明一下,这里的19其实是指一个相当于十进制里19的数,它表示64进制里第19个数。打个比方爱说就像HEX里A表示10一样,一个16进制里的FF,按照上面的表示方式其实就是15 15。再说的详细一点,rX里最前面那个19 19是因为:19*64+16=1235。
其实,有了上面那串数就可以直接进行运算了。但是小的我数学不好,只会用计算器算加减乘除,所以我再一次把它变成十进制的数,然后拿Windows提供计算器来算计。
rA before : 0
rX before : 323748033
Cell 1000 : 128
———DIV 1000————
这里我说明一下rX before里那个一长串数是怎么来的。
323748033=19*64^4+19*64^3+0*64^2+3*64^1+1*64^0。
然后得到的被除数就是323748033,除数是128。用计算器计算得到结果323748033/128=2529281余65。我们再把这个十进制的结果转换成64进制,得到:
rA after : 00 09 41 32 01
rX after : 00 00 00 01 01
好了,我们再把它按照书上的分块转回去:
rA after : [0] [ 617 ] [32] [ 1]
rX after : [0] [0] [0] [ 1] [ 1]
书上的形式是:
rA after : [0] [ 617 ] [ ?] [ ?]
rX after : [0] [0] [0] [ ?] [ 1]
完全符合。至于问号的出现,应该是由于进制不同的结果而会有所差异。这里的具体过程我没有证明,因为我的确数学功底太烂,一时半会估计也证不出来。在这里,我不得不赞叹一下高爷爷的数学能力,听说他还会吹大号和萨克斯……(小丽,你知道我想说什么……)如果有谁能够提供一个完整的证明过程,证明无论是多少进制,结果的商的第2,3位放一起,转变成十进制一定是617,而4,5位的值不能确定,的话,请务必留言告诉我。最好留下您的邮件联系方式,我会主动与您联络。可惜我是个穷人,没有办法像高爷爷那样提供2.56元钱
好人