原来,我们是这样记数的
生活中,我们稀松平常地与数字打着交道,一个约定的时间、一件商品的价格、一个人的身高、一间屋子的平方……却很少有人细细想过,这些数字是如何表达出来的?为什么你理所当然地把1024理解为「一千零二十四」而不是别的含义?
也许你从未想过,在这简单的记数中,沉淀着人类的大智慧。
一进制记数法
早在数字的概念产生之前,人类就学会了使用树枝、石子、贝壳等自然界随处可见的小物件表示猎物的、果实的、部落人口的数量。比如在某个角落堆上一堆石子,每打到1只猎物,就扔1颗石子进去,每吃掉2只猎物,就从中取走2颗石子。他们并不在石子的总数,只是时不时地瞅一眼,心底大致有数。
其实这是一种最朴素的记数方式,数学家称之为一进制记数法(unary numeral system)。我们把它符号化一下,比如用斜杠/
来表示,1就是/
,2就是//
,4就是////
,8就是////////
,好像没毛病,我们平时掰手指用的就是这种记数法,但数字一大,场面就要失控了。
符值相加记数法
于是我们得发明一些其他符号来表示更大的数值,比如用横杠-
表示10,用十字+
表示100。那么,16就是-//////
,32就是---//
,128就是+--////////
,256就是++-----//////
,漂亮。这种靠符号类型和符号数量表示数字的方法被称为符值相加记数法(sign-value notation),古埃及和古罗马用的都是它,只不过符号各不相同。
古埃及的记数符号:
1 | 10 | 100 | 1000 | 10000 | 100000 | 1000000 |
---|---|---|---|---|---|---|
1024在古埃及就写作:
你会发现,符值相加记数法的一大优点是,符号的顺序可以任意打乱,数字含义不受影响。我国藏族曾用石子表示1、木棍表示10、果核表示100、蚕豆表示1000、瓦片表示10000,那么,当你把1颗蚕豆、2根木棍和4颗石子胡乱地攥在手里,别人依然知道它们是1024。
古罗马的做法略有不同,他们对五进制情有独钟:
1 | 5 | 10 | 50 | 100 | 500 | 1000 |
---|---|---|---|---|---|---|
I | V | X | L | C | D | M |
这些符号沿用至今,想必大家(至少对前3个)都比较熟悉,许多钟表喜欢使用罗马数字,1~12分别表示为:I
、II
、III
、IV
、V
、VI
、VII
、VIII
、IX
、X
、XI
、XII
。你会发现,罗马记数法是符值相加记数法的变种,因为它不光「相加」,还「相减」。这种方式就不允许符号乱序了,IV
和VI
表示的是不同的数字。
那罗马人何苦要使用这种更复杂的记数法呢?无非是为了读写方便。同样表示9,IX
总比/////////
更好写、更好读。
其实有一种更好使的方法——用另外一些列符号来表示符号的数量。比如用A
表示1个符号,用B
表示2个符号,以此类推,用I
表示9个符号。上文表示256的++-----//////
就可以写作B+5-F/
——你一定感觉莫名其妙,这种写法哪里方便了。其实中文的数字表示就是这种形式,只不过我们用得太习惯了,以至于没有发现。
在中文中,个
、十
、百
代替了/
、-
、+
,而一
、二
、三
代替了A
、B
、C
。256就写作二百五十六个
,个
比较累赘,我们就往往把它省略了。
其实像日语、英语用的也同样是这种记数法,简洁、优雅。
美中不足的是,这种形式虽便于读写,却不便于计算。中国古人为算筹和算盘这类经典算具搭建起广阔的舞台,却没给笔算留出一席之地。想象一下,如果让你把这些汉字写在草稿纸上,列个竖式,你的内心一定非常别扭。
位值制记数法
公元5世纪,印度数学家阿耶波多(Aryabhata 476–550)创立了现在广泛使用的位值制记数法(positional notation/place-value notation),该记数法使用的主要符号,是同为印度人发明的阿拉伯数字:0
、1
、2
、3
、4
、5
、6
、7
、8
、9
。
与符值相加记数法类比,位值制中的1
、2
、3
代替的是A
、B
、C
,那/
、-
、+
呢?是靠阿拉伯数字的位置来表示的。众所周知,最右位相当于/
,次右位相当于-
。靠每个位置上的数值来表示数字,故名位值制。
严谨的数学家用一种多项式高度概括了位值制记数法的本质,在十进制中,这个多项式是这样的:
这是一个n位十进制数,ai就是第i位上的数值。为便于直观理解,举个1024的例子吧:
由于我们熟悉了十进制,这样费心费力的展开可能会让你觉得好笑,但当我们把它推广到其他进制时,这个多项式的价值就体现了出来。n位b进制数的位值制表示:
1024用二进制怎么表示?
因此,1024的二进制写作10000000000
。
2019用二进制怎么表示?
因此,2019的二进制写作11111100011
。
除了最普遍的十进制和计算机中的进制,常见的还有七进制(如1周7天)、十二进制(如1年12个月)、十六进制(如古代1斤16两)、六十进制(如六十甲子)等等,只要有意义,任何进制都可以为你所用。
非标准位值制
在上述的多项式中,如果ai或b的取值奇葩一点,就形成了非标准位值制(non-standard positional numeral systems),这类记数法往往应用于专业领域,很难在日常生活中见到。比如标准位值制中的三进制ai的取值为0、1、2,但在一种名为平衡三进制(balanced ternary)的非标准位值制中,ai取-1、0、1,苏联曾使用这种进制研发电子计算机。