|
|
这种问题我本来不想作答,因为我年轻的时候也碰到过这个问题,当时有一名计算机出身的同事转换二进制数用了这个手法,把当时还是菜鸟的我着实吓了一跳。因为我们学数学出身的人一向并不在意这个问题。
这来源于这样一个事实,每个数在r进制下(n位)有一个唯一表达式
(ab…xyz)=ar^(n-1)+br(n-2)+…+xr^2+yr+z
这个数除以r,余数是z,商是(ab…xy)对这个商继续除以r,余数是y,商是(ab…x),再除余数是x……,这样一直除到第(n-1)次即除了r^(n-1),最后的余数就是a。现在将这些余数倒过来排列,就得出r进制下的数(ab…xyz)。
例如5=1*2^2+0*2+1,写成二进制就是(101),先除以2,商是2余1,这个1就是最后一位数1,而这个商2=1*2+0,再除以2得商1余数0,这个0就是第二位数,而这个商1比2小就是最后的余数也就是第一位数。这就是算法的原理。至于这个法则不仅对十进制有效,对任何进制之间的转化,理论上也是一致的。 |
|