記數系統

記數系統（numeral system，number system，system of numeration）又稱記數法、記數制度、記數制、數制，是關於如何用符號來表示「數字的系統」或「數的體系」，也是一套用於表示數字的符號和規則（即「如何寫數字」）。其關注的是：進位制、數位、符號集合。「記」代表 notation（記法），強調的是書面表達。

記數（numeration）即數表示（number representation）是一個數在某一記數制中的記錄、記法、記號或表示，強調其書寫符號及記載規則。

記數可以俗稱為「寫數」，以區別同音詞計數。「記數」側重於 符號 的 記錄與書寫，「計數」側重於 數量 的 清點與計算。

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

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

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

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

## 歷史

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

在公元前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_na_{n-1}...a_1a_0.c_1c_2c_3...)_b = \sum_{k=0}^n a_kb^k + \sum_{k=1}^\infty c_kb^{-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.