文字与编码的奥妙(上篇)

文字的发明

文字是社会发展到一定阶段的产物。原始社会时期,人群、部落之间交流较少,有声语言已能满足需要。后来,随着社会生产的发展,人们的社会交际日趋频繁,而有声语言一发即逝,既不能传诸远方,亦不能留诸异日,用它作为传递思想信息的唯一手段,已越来越不能满足需要了。

在旧石器时代,社会组织和社会关系都很原始、很简单。人类社会的最基本的交际工具语言已经可以满足人们之间的交际需要了,不会发生创造文字的迫切要求。

到了新石器时代,社会组织逐渐复杂起来,生产范围也开始扩大,出现了初步的社会分工,交换也在这个基础上萌芽了;人口的”密集“也使社会生活大大”复杂“起来,氏族、部落间的联系和冲突也大大增加了。口耳相传的语言已经不完全适用了,人们产生了异时异地进行交际的要求。

文字正是应这种要求而诞生的。克服语言与时间、空间的矛盾,是当时社会遇到的社会性的问题,解决这个问题是全社会努力的结果。因此,文字是社会发展到特定阶段的社会需要的产物,也是全社会的发明。

各种各样的文字

不同国家,不同地区的人,他们的语言往往是不一样的,并且他们的文字也是各种各样的。近现代的世界文字,大概有5种最重要的文字系统:汉字、拉丁字母、斯拉夫字母、阿拉伯字母、印度字母。其中除了汉字是表意文字外,其余4种是表音文字,它们分别形成了五大文字流通圈。

汉字主要流通于东亚;拉丁字母占据美洲、大洋洲的全部,欧洲、非洲的大部分,亚洲的小部分;阿拉伯字母主要流通于北非、西亚的阿拉伯国家;斯拉夫字母主要流通于俄罗斯、白俄罗斯、乌克兰、保加利亚、塞尔维亚等国家;印度字母主要流通于南亚和东南亚。

各种各样的数字

虽然现代世界文字百花齐放,各种各样的文字都有其特殊性。对于数字来说,其种类虽然没有文字那么多,但也不少了,主要有:古埃及数字、罗马数字、玛雅数字、古印度数字(阿拉伯数字的前身)、阿拉伯数字、中文数字。目前还在使用的数字大概是以下这些:

古埃及数字

古埃及的数字系统是十进制的,他们有以下这些基础数字:

egypt-numbers.png

如果我想表达一个898的数字,则需要8个表示100的数字,9个表示10的数字,8个表示1的数字,加起来总共需要25个数字。用这么多数字表示一个比较大的数,这是非常可怕的,当数字越来越大时,所需要的基础数字也就越来越多。这种计数方式是非常复杂的,一方面是基础数字太多,另一方面是想表示一个数字时,需要画出所有的所需的基础数字。

罗马数字

罗马数字 没有进位制的概念,他没有表示零的数字。

rome-numbers.png

从上图中我们可以看出来,罗马数字中也是有一些基础数字的:

罗马数字

阿拉伯数字

罗马数字

阿拉伯数字

1

V

5

X

10

L

50

C

100

D

500

M

1000

大约在两千五百年前,罗马人还处在文化发展的初期,当时他们用手指作为计算工具。为了表示一、二、三、四个物体,就分别伸出一、二、三、四个手指;表示五个物体就伸出一只手;表示十个物体就伸出两只手。这种习惯人类一直沿用到今天。人们在交谈中,往往就是运用这样的手势来表示数字的。当时,罗马人为了记录这些数字,便在羊皮上画出Ⅰ、Ⅱ、Ⅲ来代替手指的数;要表示一只手时,就写成“Ⅴ”形,表示大指与食指张开的形状;表示两只手时,就画成“ⅤⅤ”形,后来又写成一只手向上,一只手向下的“Ⅹ”,这就是罗马数字的雏形。

rome-base-numbers.png

现在我们能在许多手表的表盘上看到罗马数字的身影:

rome-numbers-watch.png

玛雅数字

玛雅数字 是玛雅文明所使用的 二十进制 记数系统。

玛雅数字由3个符号的组合构成:0(贝形符号)、1(点)、5(横线)。

maya-numbers.png

小于等于19的数字,如19写作3根横线上另加4个点。

大于19的数字以20为进制累进。如30写作一个点(代表20),下面是一个贝形符号作为进制的标志,再下面加一个10(两道横线)。

特别是数系中“0”这个符号的发明和应用,无疑具有重要意义。前人栽树,后人乘凉,现代人均接受了玛雅人的独特创造,并称玛雅的数系为“人类最伟大的成就之一”。

阿拉伯数字

阿拉伯数字 的前身是印度数字,他是现今国际通用的数字。最初由 古印度人 发明,后由 阿拉伯人 传向欧洲,之后再经 欧洲人 将其现代化。正因阿拉伯人的传播,成为该种数字最终被国际通用的关键节点,所以人们称其为“阿拉伯数字”。阿拉伯数字由0,1,2,3,4,5,6,7,8,9共10个计数符号组成。采取位值法,高位在左,低位在右,从左往右书写。

公元3世纪,古印度的一位科学家 巴格达 发明了阿拉伯数字。最古的计数目大概至多到3,为了要设想“4”这个数字,就必须把2和2加起来,5是2+2+1,3这个数字是2+1得来的,大概较晚才出现了用手写的五指表示5这个数字和用双手的十指表示10这个数字。

两百年后,团结在伊斯兰教下的阿拉伯人征服了周围的民族,建立了东起印度,西从非洲到西班牙的阿拉伯帝国。后来,这个伊斯兰大帝国分裂成东、西两个国家。由于这两个国家的各代君王都奖励文化和艺术,所以两国的首都都非常繁荣,而其中特别繁华的是东都—巴格达,西来的希腊文化和东来的印度文化都汇集到这里来了。阿拉伯人将两种文化理解消化,从而创造了独特的阿拉伯文化。

大约700年前后,阿拉伯人征服了旁遮普地区,他们吃惊地发现:被征服地区的数学比他们先进。于是设法吸收这些数字。771年,印度北部的数学家被抓到了阿拉伯的巴格达,被迫给当地人传授新的数学符号和体系,以及印度式的计算方法(用的计算法)。由于印度数字和印度计数法既简单又方便,其优点远远超过了其他的计算法,阿拉伯的学者们很愿意学习这些先进知识,商人们也乐于采用这种方法去做生意。

后来,阿拉伯人把这种数字传入西班牙。公元10世纪,又由教皇 热尔贝·奥里亚克 传到欧洲其他国家。公元1200年左右,欧洲的学者正式采用了这些符号和体系。至13世纪,在意大利比萨的数学家 费婆拿契 的倡导下,普通欧洲人也开始采用阿拉伯数字,15世纪时这种现象已相当普遍。那时的阿拉伯数字的形状与现代的阿拉伯数字尚不完全相同,只是比较接近而已,为使它们变成今天的1、2、3、4、5、6、7、8、9、0的书写方式,又有许多数学家花费了不少心血。

巴格达发明的数字的演变图:

baghdad-numbers-evolution.png

阿拉伯数字演变史

最早人们用线条的多少来表示数字,但是当数字慢慢变多时,这种计数方式很不方便,画的线条会非常多。

arabic-numbers-evolution-1.png

就跟二进制一样,当要表示一个非常大的数字时,写出来的二进制会很长,所以迫切需要一种更先进的计数方式。

苏美尔人 发明了一种更先进的计数符号,但这些符号很复杂,估计科学家们都很难搞懂,并不适合日常的使用。

arabic-numbers-evolution-2.png

数学家 Abu Ja'far Muhammad ibn Musa AI-Khwarizmi (我晕,这名字真TM长,一看就是数学家)的出现,推动了数字发展的进程,进而推动了人类发展的进程。这个名字巨长的数学家(下面我们将简称他为 阿布 数学家),他需要做大量的演算,首先需要一套简单的计数符号。像上面 苏美尔人 发明的计数符号太复杂了,又是横着又是竖着,很可能一不小心就算错了。

为了解决自身的需求,阿布 教授发明了一套简单的计数符号,如下图所示:

arabic-numbers-evolution-3.png

从图中我们可以看出来有几个熟悉的身影:1、2、3、6、9。嘿嘿,跟我们现在的数字符号很接近,感觉有戏。

其实 阿布 教授想到的计数方法很简单,就是数每个符号上面角的个数。

arabic-numbers-evolution-4.png

可是我们现代数字中的4,明明不止4个角啊,有可能有5个甚至6个角,这怎么解释啊。

arabic-numbers-evolution-5.png

arabic-numbers-evolution-6.png

额,我没办法解释,在古人看来我们现代的4是错的,但是他现在就是这样了,我也没办法啊,我也管不了他。

arabic-numbers-evolution-7.png

5-10的符号要负责一点,需要借助一些辅助,在看之前,先画一条水平的线,横穿整个符号。

arabic-numbers-evolution-8.png

画完水平线之后,就把这些符号分成了两部分了,有的在水平线之上,有的在水平线之下。

那个圆圈,把他比作是一个握起来的拳头,而一个拳头是有5个手指吧,把他记作数字5很合理吧?

arabic-numbers-evolution-9.png

有了5之后,10就很自然而然的得到了,我把两个握紧的拳头举起来,超过水平线,就得到了10,哈哈,太机智了。

有了5和10之后,其他几个符号就很好创造了呀。5+1个角就是6,5+2个角就是7,相应的,10-1个角就是9,10-2个角就是8,完美!

arabic-numbers-evolution-10.png

arabic-numbers-evolution-11.png

后来为了书写方便,8的符号在水平线下方的两个直线也关闭起来了,就变成了现在8的样子。

arabic-numbers-evolution-12.png

5和7也慢慢的发生了变化,不过那条水平线一直伴随着他们。最终5只取了圆圈的右半部分,用来和6进行区分。

arabic-numbers-evolution-13.png

其中5的演变是这样的:

arabic-numbers-evolution-14.png

7的演变是这样的:

arabic-numbers-evolution-15.png

随着时间的推移,古代的数字从最初的样子慢慢的演变,最终成为了现代的模样:

arabic-numbers-evolution-16.png

arabic-numbers-evolution-17.png

进制的发明

进位制 (Positional notation),即用基数和基数的整数幂的和来表示数字的方法,是从 符值相加记数法 (Sign-value notation)演化而来的。

例如十进制中有10个基数,要计算整个数字的大小,需要从左往右计算每一位数字的值,然后将每一位上的数字的值相加后的和作为最终的结果。

在现代社会中,最常用的进制是十进制,但是我们仍然能看到很多其他的进制。十进制并不是一开始就确立了它的地位的。在阿拉伯数字成为国际计数符号之前,各国的计数方式中大量存在各种非十进制的计数系统。

列举一些常见的非十进制的应用:

应用场景

包含的进制

罗马数字

五进制 I,II,III,IV,V,VI

中国古代的算筹

五进制

算盘

五进制,十进制

唱票画的“正”字

五进制

计算机

二进制

计算机的发明

社会发展到另一个阶段产生了另一种伟大的发明:计算机。

世界上第一台电子数字式计算机于1946年2月15日在美国宾夕法尼亚大学正式投入运行,它的名称叫ENIAC(埃尼阿克),是电子数值积分计算机(The Electronic Numberical Intergrator and Computer)的缩写。

它使用了17468个真空电子管,耗电174千瓦,占地170平方米,重达30吨,每秒钟可进行5000次加法运算。虽然它的功能还比不上今天最普通的一台微型计算机,但在当时它已是运算速度的绝对冠军,并且其运算的精确度和准确度也是史无前例的。

以圆周率(π)的计算为例,中国的古代科学家 祖冲之 利用算筹,耗费15年心血,才把圆周率计算到小数点后7位数。一千多年后,英国人香克斯以毕生精力计算圆周率,才计算到小数点后707位。而使用ENIAC进行计算,仅用了40秒就达到了这个记录,还发现香克斯的计算中,第528位是错误的。

ENIAC奠定了电子计算机的发展基础,开辟了一个计算机科学技术的新纪元。有人将其称为人类第三次产业革命开始的标志。

ENIAC诞生后,数学家 冯•诺依曼 提出了重大的改进理论,主要有两点:

  • 一是电子计算机应该以二进制为运算基础
  • 二是电子计算机应采用存储程序方式工作

并且进一步明确指出了整个计算机的结构应由五个部分组成:运算器、控制器、存储器、输入装置和输出装置。

冯•诺依曼 的这些理论的提出,解决了计算机的运算自动化的问题和速度配合问题,对后来计算机的发展起到了决定性的作用。直至今天,绝大部分的计算机还是采用 冯•诺依曼 方式工作。

至今为止,计算机中都是使用的二进制。那么为什么要用二进制,而不是十进制呢。这要从计算机的物理层面考虑,因为计算机是用数字电路构成的,而数字电路基本的构成是逻辑门电路,我们知道逻辑门电路的理论基础是布尔运算,而布尔运算的结果只有两种。而电子元器件最容易确定的状态就是导通与断开,正好对应布尔中的true和false,从硬件的角度看就是,电信号在0-2伏低电压用来表示0,2-5伏高电压用来表示1。所以这些都决定了计算机使用二进制,而不是十进制或者八进制。

其实八进制或十六进制也只是为了我们人类的方便而采用的,在C/C++的代码中不能直接写二进制,而是采用八进制或十六进制。可是为什么是八进制或十六进制呢?因为8或16都是2的次方,他们之间可以直接进行转换,并且通过左移右移的方式就可以快速转换。

本文转载自「逅羿逐码」

本文分享自微信公众号 - 码洞(codehole)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励