进制转换

**記數系統**（numeral system，system of numeration）或稱**記數法**、**數制**，是使用一組數字符號來表示數的體系。**記數**可以俗稱為「寫數」，以區別同音詞計數。

一個理想的記數系統能夠：

* 有效地描述一組數（例如，整數、實數）
* 所有的數對應唯一的表示（至少有一個標準表示法）
* 反映數的代數和算術結構

記數系統可以按照以下方式分類：

* 按照底數區分的進位制，可分為十進位、二進位、八進位等
* 按照寫法，可分為中文數字、阿拉伯數字、羅馬數字等

## 歷史

在木頭、骨頭或石頭上的計數符號從史前時代就開始被使用了。石器時代的文化，包括古代印第安人，使用計數符號進行賭博、私人服務和交易。

在公元前 8000 年至前 3500 年間，蘇美爾人發明了使用粘土保留數字信息。他們的做法是將各種形狀的小的粘土記號像珠子一樣串在一起。從大約前 3500 年開始，粘土記號逐漸被數字符號取代。這些數字符號是使用圓的筆針刻在粘土塊上，然後燒制而成的。大約前 3100 年，數字符號與被計數的事物分離，成為抽象的符號。在前 2700 年至前 2000 年間，圓的筆針逐漸被一種尖的筆針取代，這種筆針可以在粘土上刻出楔形符號。這種楔形數字和圓形數字相似，並保留了符號數值記數法。這些記數系統逐漸演變成了一種常見的六十進位系統。這個系統是一種位置數值記數法，只使用豎向的楔形和人形兩種符號，而且能夠表示分數。這個系統在古巴比倫的初期（大約前 1950 年）得到了充分的發展，並成為巴比倫尼亞的標準。

上述六十進位系統是一種混合進位制系統，它的一個符號序列的不同位置上使用 10 和 6 兩個基數。這個系統被廣泛地應用於商業，同時也在天文學和其他計算中被使用。這個系統從巴比倫尼亞輸出，並傳遍了美索不達米亞，包括希臘，羅馬和埃及。今天，我們仍然用它來計算時間（1 小時 = 60 分鐘）和角度（1 度 = 60 分）。

中國古代採用算籌記數，個位百位萬位等奇數位用縱籌，偶數位用橫籌，零用空位表示。有時，軍隊人數和供給品記數採用質數的算籌，並按照模算術運算。（參看：大衍求一術，中國剩餘定理）。模算術的好處在於，儘管其加法相對困難，但乘法很容易。這使得模算術很適合軍需品的計算。在現代，同樣的模算術有時用於數位訊號處理。

羅馬帝國使用臘、紙草、和石頭上的割符，大致遵從希臘人將字母對應不同數的習慣。羅馬數字在歐洲被普遍使用，直到 1500 年代進位制開始流行。

中美洲的瑪雅數字採用 20 或 18 為基數的系統，可能繼承自奧爾梅克文明，它包含了位置數值記數法和零這樣的高級屬性。他們將此用於高級的天文計算，包括高精度的太陽年長度和金星軌道的計算。

印加帝國採用奇普，一種打結的帶顏色的繩子來記數。關於使用結和顏色來編碼的知識被西班牙征服者於 16 世紀所擯棄，並因此失傳。今天，簡單的結繩工具仍在安地斯山脈地區使用。

有些權威認為數位算術隨著中國的算盤的廣泛使用而開始。最早的書面數位記錄似乎是大約 400 年的算盤計算的結果。特別在大約 932 年，零已被中國數學家正確地表述了，並且似乎是因為採用一個圓圈表示沒有算盤珠子的那一位而產生的。

在印度，現代數位數字系統被傳給阿拉伯人。可能是和天文表格一起，這一系統被一位印度大使在約 773 年帶到巴格達。對於印度的數字系統的詳細討論，參看阿拉伯數字和印度數字。

從印度出發，伊斯蘭蘇丹們和非洲的旺盛貿易將此數字系統的概念帶到了開羅。阿拉伯數學家們將此系統推廣到十進位分數。在 9 世紀，花拉子密寫下了關於該系統的重要著作。隨著 12 世紀該著作在西班牙被翻譯和斐波那契的《計算書》在 1201 年的出版，該系統傳入歐洲。在歐洲，完整的帶零的印度系統是於 12 世紀由阿拉伯人帶來的。

二進位系統由萊布尼茲在 17 世紀傳播，萊布尼茲在他工作的早期形成了這一概念，並在閱讀中國的《易經》再次鞏固了這一想法。由於計算機的使用，二進位系統在 20 世紀變得更加普遍。

## 常用基數

### 二

基數為 2 的系統（二進制）的流行及應用主要是因為電子計算機的發明。以 2 為基數，也代表只有兩種變化：不是 1 就是 0。最初的電子計算機以開關電路組成，只有兩種狀態：開（1）及關（0），並以此引申作各種複雜的邏輯變化。而現今二進制亦普遍使用於數碼影音系統中。

### 八

基數 8 的系統（八進位）是北加利福尼亞的 Yuki 部落設計的，他們使用了手指間的間隔來數數。也有語言學證據顯示青銅時代印歐人（多數歐洲和印度語言來源於此）可能用基數 10 的系統取代了基數 8 系統（或者一個只能數到 8 的系統）。證據是代表 9 的詞，_newm_，根據一些歷史學家推測來源於「新」（'new', _newo-_），這表示數字 9 是當時最近發明的，所以稱為『新數』（'new number'） (Mallory & Adams 1997 年)。

### 九

涅涅茨語曾經使用基數 9 的系統（九進位），但在俄語的影響下轉變為十進位。_yúq_ 一詞最初表示 9，但在俄語影響下變成了 10 的意思；所以在現在的涅涅茨，9 現在是 _xasu-yúq_，也就是「涅涅茨 _yúq_」，而 10 就是 _yúq_，但在東部方言中也作 _lúca-yúq_, 也就是「俄語 _yúq_」。

### 十

十進位是今天最為常用的系統。它被視為因為人類具有十根手指而產生。

### 十二

基數 12 的系統（十二進位）曾經很流行，因為乘法和除法比十進位方便，而加法同樣簡單。12 很有用，因為它有很多因子。它是 1 到 4 最小的公倍數。我們對十二有一個特殊的詞「打」(_dozen_)，並且使用 12 小時作為一個白天或者一個黑夜。十二進位來自於一隻手除了拇指以外的四個手指的指節個數，它們曾被用來記數。

### 十六

基數為 16 的系統（十六進制）曾經在中國的重量單位上使用過，比如，規定 16 兩為一斤。現在的 16 進位則普遍應用在電腦領域，這是因為將二進位數字轉化為十六進位數字非常容易，用十六進位表達數字比用二進制方便。1 位元組（一個 8 個位的二進位數字）可以很方便的表示成一個兩個位的 16 進位數字。

### 二十

瑪雅文明和其它前哥倫布時期中美洲文明使用二十進位、因努伊特的因努伊特數字，源於人的手指和腳趾總數。

### 六十

基數為 60 的系統（六十進位）是蘇美爾人和他們在美索不達米亞的繼承者所使用的，今天還在我們的計時系統中存在（所以一小時有 60 分鐘而一分鐘有 60 秒）。60 也有大量因子，包括前六個自然數。六十進位系統被認為是因為十進位和十二進位合併過程中產生的。中國曆法中，六十進位的甲子系統用於表示年，每個 60 年循環中的年用兩個符號代表，第一個符號是十進位的天干，第二個符號是十二進位的地支。兩個符號在後續一年中同時前進一，這樣同樣的組合在 60 年後再現。該系統的第二個符號也和 12 個動物的生肖系統對應。

## 進位制詳解

在「基數 $b$ 」的「**位置記數系統**」（其中 $b$ 是一個正自然數，叫做基數）中， $b$ 個「基本符號」（或稱數字）對應於包括 0 的 最小 $b$ 個自然數。 要產生其他的數，必須變動這些基本符號在數中的位置。最後一位的符號用它本身的值，向左一位其值乘以 $b$ 。 

例如，在十進位系統中（基數 10），數 4327 表示 (**4**×103) + (**3**×102) + (**2**×101) + (**7**×100)，注意 $10^{0}$ = 1。

一般來講，若 $b$ 是基底，我們在 $b$ 進位系統中的數表示為 $a$ 1 $b$ k + $a$ 2 $b$ k-1 + $a$ 3 $b$ k-2 + ... + $a$ k+1 $b$ 0 的形式，並按次序寫下數字 $a$ 1 $a$ 2 $a$ 3 ... $a$ k+1。這些數字是 0 到 $b$ -1 的自然數。

若一段文字（譬如這段文字）討論多個基數，若有歧義時，基數（本身用十進位表示）用下標方式寫在數的右邊。除非有上下文說明，沒有下標的數字視為十進位。

通過使用一點（小數點）來將數字分成兩組，就可以用位置系統來表示小數。例如，基數 - 2 系統 10.11 表示 1×21+ 0×20 +1×2-1 +1×2-2 = 2.75。

一般來講， $b$ 進位系統中的數有如下形式：

　
: $(a_{n}a_{n-1}...a_{1}a_{0}.c_{1}c_{2}c_{3}...)_{b}=\sum _{k=0}^{n}a_{k}b^{k}+\sum _{k=1}^{\infty }c_{k}b^{-k}$

數 $b^{k}$ 和 $b^{-k}$ 是相應數字的 比重。

注意有一個數有一個終止或者循環若且唯若它是有理數；這不依賴於基數的選擇。在一個進位中終止的數可以在另外一個有循環小數（thus 0.310 = 0.0100110011001...2）。一個無理數在所有進位中不循環（無窮位不循環數字）。這樣，例如二進位中，π = 3.1415926...10 可以寫作不循環的 11.001001000011111...2。

若 $b$ = $p$ 是一個質數，可以定義其向左的擴展不停止的 $p$ 進位數字；這些數字稱為 p 進數 (p-adic)。

## 進位轉換

轉換正整數的進位的有一個簡單算法，就是通過用目標基數作長除法；餘數給出從最低位開始的「數字」。例如，1020304 從 10 進位轉到 7 進位：

```
1020304 / 7 = 145757 r 5 ↑  => 11446435
 145757 / 7 =  20822 r 3 │
  20822 / 7 =   2974 r 4 │
   2974 / 7 =    424 r 6 │
    424 / 7 =     60 r 4 │
     60 / 7 =      8 r 4 │
      8 / 7 =      1 r 1 │
      1 / 7 =      0 r 1 │
```

再如，10110111 從 2 進位到 5 進位：

```
10110111 / 101 = 100100 r 11  (3) ↑  => 1213
  100100 / 101 =    111 r  1  (1) │
     111 / 101 =      1 r 10  (2) │
       1 / 101 =      0 r  1  (1) │
```

轉換一個「十進位」小數，可以用重複乘法，將整數部分作為「數字」。不幸的是有限小數不一定轉換成為有限小數，例如 0.1A4C 從 16 進位轉換到 9 進位：

```
0.1A4C × 9 = 0.ECAC │
0.ECAC × 9 = 8.520C │
0.520C × 9 = 2.E26C │
0.E26C × 9 = 7.F5CC │
0.F5CC × 9 = 8.A42C │
0.A42C × 9 = 5.C58C ↓  => 0.082785...a
```

## 一般化變長整數

更一般化的有一種記法（這裡寫作小頭式），例如 $a$ 0 $a$ 1 $a$ 2 用作 $a$ 0 + $a$ 1 $b$ 1 + $a$ 2 $b$ 1 $b$ 2, etc.

 

## 註釋

## 參考文獻

## 參見

## 外部連結

* 進位轉換器（頁面存檔備份，存於網際網路檔案館）
* 帶小數點的進位轉換器
* 數字感覺與數數課程（頁面存檔備份，存於網際網路檔案館）