關(guān)于進(jìn)位制的一點(diǎn)[思考]
計(jì)算機(jī)里都是十六進(jìn)制數(shù),設(shè)置起來都需要轉(zhuǎn)寫。用的多了,就想找規(guī)律。首先說短除法,不但十進(jìn)制變二進(jìn)制可以用,理論上任何進(jìn)制轉(zhuǎn)換都能用。本質(zhì)上這是一個(gè)不斷求前一位的過程。比如把560,這是主板trfc常見值,轉(zhuǎn)化成16進(jìn)制。從第零位開始,先求第零位前一位,也就是第一位是多少,560有35個(gè)16,沒有剩余,第一位是0;再求第二位,35個(gè)16有多少個(gè)16x16,有2個(gè)16x16加3個(gè)16,第二位補(bǔ)上3就行了;再求第三位,還有2個(gè)16x16,那就不用再計(jì)算了,第三位是2。結(jié)果就是230。這個(gè)過程規(guī)范一下就是短除式。
我們注意到這個(gè)過程只需要用到10進(jìn)制的除法,甚至沒有遇到9以上的余數(shù)需要轉(zhuǎn)寫成16進(jìn)制。實(shí)際上在其他進(jìn)制轉(zhuǎn)化時(shí)都要用相應(yīng)進(jìn)制的除法,而這就需要掌握相應(yīng)進(jìn)制的乘法表。那如果要基于10進(jìn)制乘法表手工編寫16進(jìn)制的乘法表,怎么樣計(jì)算量最小呢?從1x1列到15x15再一一轉(zhuǎn)寫成16進(jìn)制數(shù)顯然不是一個(gè)小工程。我們分類討論。首先考慮不需要轉(zhuǎn)寫的式子(以下出現(xiàn)轉(zhuǎn)寫包括兩種含義i算式的改寫;ii十進(jìn)制數(shù)寫成十六進(jìn)制數(shù)。不過算式改寫就是改其中的數(shù)字,兩種含義姑且不做區(qū)分)相乘結(jié)果小于10的式子不需要轉(zhuǎn)寫,其實(shí)就是3x3之前不變;然后剩下10進(jìn)制乘法表和16進(jìn)制乘法表里均有的式子只需要結(jié)果轉(zhuǎn)寫;最后10進(jìn)制表里沒有的16進(jìn)制乘法表算式,用十進(jìn)制數(shù)列式,用前面已經(jīng)轉(zhuǎn)寫過的算式計(jì)算。除法是乘法逆運(yùn)算,理論上這種分類討論大量運(yùn)用乘法的方案是快于純轉(zhuǎn)寫的方案的。
不過只理清理論還是會(huì)出錯(cuò),因?yàn)橛?jì)算機(jī)大量數(shù)不是1開始而是從零開始,所以諸如打算設(shè)置成20的項(xiàng)進(jìn)系統(tǒng)一看設(shè)置成了19也是有發(fā)生的。