记数系统

记数系统（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.