人類早期為了數獵物、果實等物體的需要,逐漸產生了數。隨著生產力的不斷發展,人們在實踐中接觸的數目越來越多,也越來越大,因而需要給所有自然數命名。但是自然數有無限多個,如果對於每一個自然數都給一個獨立的名稱,不僅不方便,而且也不可能,因而產生了用不太多的數字符號來表示任意自然數的要求,於是,在產生記數符號的過程中,逐漸形成了不同的進位制度。
十進位的起源
世界上的多數民族都不約而同地採用了「滿十進一」的十進位。十進位,以及由它衍生出來的百進位、千進位等共同規範了我們的算術體系。時至今日,它已是我們生活中最不可缺少的一部分。我國使用十進位的歷史,可以一直追溯到商代。
商代中期已產生一套十進位數字和記數法,從已發現的商代陶文和甲骨文中,我們可以看到當時已能夠用一、二、三、四、五、六、七、八、九、十、百、千、萬等十三個數字,記十萬以內的自然數。這些記數文字的形狀和寫法在後世雖有所變化,但這種記數方法卻一直被沿襲,並日趨完善。
周代金文的紀數法繼承了商代的十進位, 又有明顯的進步,十進數量級符號有十、百、千、萬、億,如西周金文「伐鬼方……俘萬三千八十一人」,「武王遂徵四方,俘人三億萬有二百三十」,出現了位值記數,例如 「俘牛三百五十五「,其中三百五十五寫成「三全XX」,前面的「全」是金文的「百」,後面兩個XX是五十五,省去了「十」,出現了位置概念,但尚未形成完整的位值制。春秋戰國時期出現了嚴格的十進位制籌算記數,也發明了用於十進位制乘法、除法的九九表。
根據公元4世紀的《孫子算經》的記載,任何數都是由九個縱排數字和九個橫排數字按個、百、萬等用縱籌,十、千等用橫籌來表示,零用空位表示。這是完整的十進位值制。不僅如此,藉助於位值制,用算籌還可以表示分數、小數、負數、二次和高次方程、線性方程組、多元高次方程組等。算籌和位值制奠定了中國數學長於計算的基礎。
除了中國之外,在其他地方也出現了類似的十進位記數法,比如古印度,古希臘等等。亞里斯多德曾經說過,人類普遍使用十進位,只不過是因為人生來就有十根手指。與此相對的,已經退出歷史舞臺的瑪雅數學使用的是二十進位,考古學家猜測這是因為他們在數數的時候除了手指,還加上了腳趾頭的緣故。英語單詞Digit(數字)可以指手指或腳趾,單詞five(五)和單詞fist(拳頭)有相同的詞根,出現這種情況也並不是巧合。
在純數學的層面上說,十進位因子太少,只有2,5兩個,而十二進位,數碼只比十進位多兩個,因子卻有2,3,4,6四個。從這個層面來看十進位並不是最優秀的進位,但是因為在生理上具有普適的優點,方便理解,也最容易被不同地方的人接受,所以比起十二進位,二十進位,六十進位這些方法,十進位制的記數法堪稱古代世界最流行,也是最先進、最科學的記數法,對世界科學和文化的發展有著不可估量的作用。
不同的進位制記數法
這個世界上絕不是僅有十進位。在數學發展史上,不同時代,不同地域也使用不同的進位法。比如電腦使用的二進位,星期是七進位,月份是十二進位,時間是六十進位等等。
二進位的寫法只有兩種數碼:0和1。它是逢二進一,借一當二。與十進位相比,二進位最簡單,只需要兩個基本數值,但是使用起來卻很麻煩。試想原始人打獵,獲得三個獵物就得進一位,獲得五個就又得進一位,進位頻繁會造成位數太多,計算容易發生錯誤。
八進位是逢八進一,也就是可以用0,1,2,3,4,5,6,7表示個位,當到8的時候變成了兩位數10,我們一般在八進位數10前面加上0,八進位數的10就變成了010了,010表示的是8。八進位是有其優越性的,因為它是二的倍數,又是二的倍數的倍數,似乎優於十進位;它之所以沒能流行,還是因為人類的習慣。
十六進位是逢十六進一,也就是可以用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F表示個位,其中A,B,C,D,E,F分別表示十進位中的10,11,12,13,14,15,當數到16的時候就要進位了,為了和十進位區別,用0x10表示,0x10表示的不是10,而是16。十六進位在中國近代還在使用,只限於重量單位,十六兩為一斤。可能的來源是這樣:把一斤重的東西平分一次就是二分之一斤,再繼續平分就是四分之一斤,再繼續平分就是八分之一斤,繼續分就是十六分之一斤,也就是一兩了。
各種進位與十進位的轉換
十進位有以下兩個特點:使用的數字有 0、1、2、3、4、5、6、7、8、9 共 10 種。數位有一定的意義,從右往左分別表示個位、十位、百位、千位……
接下來我們以2503這個數為例。把2503拆分,是2個1000、5個100、0個10和3個3累加的結果。因此,我們可以把2503寫成以下形式:
千位、百位、十位、個位,分別可以稱作這個數字的(10的3次方)的位、(10的2次方)的位、(10的1次方)的位、(10的0次方)的位。十進位記數法的數位全都是(10的n次方)的形式。這個10便可以被稱為十進位記數法的基數或底。
在十進位記數法的基礎上類推,很快就可以掌握二進位的規則。二進位使用的數字只有0、1兩種。從右往左分別表示1位、2位、4位、8位……
這裡出現的8、4、2、1,分別表示
所以在二進位中,基數為2,各個數位以2的n次方的形式表現。因此,我們可以把二進位下的1100寫成以下形式:
二進位轉十進位
如此計算,就能將二進位記數法的1100,轉換為十進位記數法規則下的數字:
十進位轉二進位
那麼,十進位要怎麼轉化為二進位呢?其實很簡單:除就行了!
我們將十進位下的2503轉換為二進位記數法,如下圖所示,我們需要將2503反覆地除以2,並觀察餘數為「1」還是「0」。
隨後再將每步所得的餘數的列(1和0的列)逆向排列,由此就可以得到這個數二進位的表示。結果就是100111000111。
在十進位中2503隻有4位,而在二進位中要表達同樣的數則是12位數字。
有了十進位和二進位做鋪墊,我們可以按圖索驥,得出八進位記數法的特徵如下:使用的數字有0、1、2、3、4、5、6、7共8種。
從右往左分別為(8的0次方)的位、(8的1次方)的位、(8的2次方)的位、(8的3次方)的位……(基數是8)
八進位轉十進位
拿八進位數226舉例(由右向左依次乘以8的n次冪,n從零開始),轉成十進位數就是:
十進位到八進位
十進位數轉成八進位數只需要除8取餘數 最後把餘數倒過來。
比如十進位數字2456 轉化成八進位數字:
2456÷8=307,餘0;
307÷8=38,餘3;
38÷8=4,餘6;
4÷8=0,餘4。
將所有餘數倒序相連,得到結果:4630。
因此十進位的2456轉換為八進位結果為4630。
十六進位記數法的特徵如下:
使用的數字有0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共16種。
從右往左分別為(16的0次方)的位、(16的1次方)的位、(16的2次方)的位、(16的3次方)的位……(基數是16)
十六進位轉十進位
拿十六進位數96來舉例(由右向左依次乘以16的n次冪,n從零開始)
9×161+6×160=150
所以十六進位數96轉化成十進位數就是150
十進位轉十六進位
同樣十進位數轉成十六進位數就要除16再倒著取餘數。
比如說:十進位數1610轉換成十六進位
1610÷16=100……10(A);
100÷16= 6……4;
6 ÷16= 0……6;
因此十進位1610=十六進位64A
由上面的例子可以總結出N進位記數法的特徵如下:
使用的數字有0,1,2,3,…,N-1,共N種。
從右往左分別為(N的0次方)的位、(N的1次方)的位、(N的2次方)的位、(N的3次方)的位……(基數是N)
轉換規則就是
n進位轉換為十進位:
n進位上的每一個數字乘以位權再把它們全部加起來。(位權是指數制中每一固定位置對應的單位值)
十進位轉換為 n進位:
整數部分不停地除以n,直到商為0,記錄下每次的餘數,從最後一個餘數開始逆向排列。