原来,我们是这样记数的

生活中,我们稀松平常地与数字打着交道,一个约定的时间、一件商品的价格、一个人的身高、一间屋子的平方……却很少有人细细想过,这些数字是如何表达出来的?为什么你理所当然地把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分别表示为:IIIIIIIVVVIVIIVIIIIXXXIXII。你会发现,罗马记数法是符值相加记数法的变种,因为它不光「相加」,还「相减」。这种方式就不允许符号乱序了,IVVI表示的是不同的数字。

那罗马人何苦要使用这种更复杂的记数法呢?无非是为了读写方便。同样表示9,IXVIIII更简洁。

其实有一种更好使的方法——用另外一些列符号来表示符号的数量。比如用A表示1个符号,用B表示2个符号,以此类推,用I表示9个符号。上文表示256的++-----//////就可以写作B+E-F/——你一定感觉莫名其妙,这种写法哪里方便了。其实中文的数字表示就是这种形式,只不过我们用得太习惯了,以至于没有发现。

在中文中,代替了/-+,而代替了ABC。256就写作二百五十六个比较累赘,我们通常把它省略了。

其实像日语、英语用的也同样是这种记数法,简洁、优雅。

美中不足的是,这种形式虽便于读写,却不便于计算。中国古人为算筹算盘这类经典算具搭建起广阔的舞台,却没给笔算留出一席之地。想象一下,如果让你把这些汉字写在草稿纸上,列个竖式,你的内心一定非常别扭。

位值制记数法

公元5世纪,印度数学家阿耶波多(Aryabhata 476–550)创立了现在广泛使用的位值制记数法(positional notation/place-value notation),该记数法使用的主要符号,是同为印度人发明的阿拉伯数字:0123456789

与符值相加记数法类比,位值制中的123代替的是ABC,那/-+呢?是靠阿拉伯数字的位置来表示的。众所周知,最右位相当于/,次右位相当于-。靠每个位置上的数值来表示数字,故名位值制。

严谨的数学家用一种多项式高度概括了位值制记数法的本质,在十进制中,这个多项式是这样的:

a_{n-1}×10^{n-1} + ... + a_1×10^1 + a_0×10^0

a_i∈\{0, 1, ... , 9\}, i=0, 1, ... , n

这是一个n位十进制数,ai就是第i位上的数值。为便于直观理解,举个1024的例子吧:

1024 = 1×10^3 + 0×10^2 + 2×10^1 + 4×10^0

由于我们熟悉了十进制,这样费心费力的展开可能会让你觉得好笑,但当我们把它推广到其他进制时,这个多项式的价值就体现了出来。n位b进制数的位值制表示:

a_{n-1}×b^{n-1} + ... + a_1×b^1 + a_0×b^0

a_i∈\{0, 1, ... , b-1\}, i=0, 1, ... , n

1024用二进制怎么表示?

1024 = 1×2^{10} + 0×2^9 + 0×2^8 + 0×2^7 + 0×2^6 + 0×2^5 + 0×2^4 + 0×2^3 + 0×2^2 + 0×2^1 +0×2^0

因此,1024的二进制写作10000000000

2019用二进制怎么表示?

2019 = 1×2^{10} + 1×2^9 + 1×2^8 + 1×2^7 + 1×2^6 + 1×2^5 + 0×2^4 + 0×2^3 + 0×2^2 + 1×2^1 +1×2^0

因此,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,苏联曾使用这种进制研发电子计算机。

参考文献

推荐阅读更多精彩内容

  • 程序离不开数据。把数字、字母和文字输入计算机,就是希望它利用这些数据完成某些任务;例如:需要计算一份利息或者显示一...
    苏沫离阅读 1,804评论 0 6
  • //------暂时还没没看完,边看边写,最后再重新整理格式------ 前言 虽然是一本考试用书,但是知识点的归...
    梧叶已秋声阅读 166评论 0 1
  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    卐鑫卍阅读 1,158评论 1 6
  • 今天周三,这周已经过去一半,3月也已经过去三分之二,时间飞的太快,仿佛月初还在昨天。 最近状态不是很好,各种繁杂事...
    安小小2017阅读 141评论 14 20
  • 不知道为什么,每当找不到方向时,总喜欢打开你的QQ空间,听你最近听的歌,听你喜欢的歌.也许这样,我会觉得,离你有...
    妮子飞儿阅读 100评论 0 0