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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

小于等于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的书写方式,又有许多数学家花费了不少心血。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

其中5的演变是这样的:

7的演变是这样的:

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

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

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

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

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

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

世界上第一台电子数字式计算机于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的次方,他们之间可以直接进行转换,并且通过左移右移的方式就可以快速转换。

原文发布时间为:2019-1-8
本文作者:逅弈
本文来自云栖社区合作伙伴“ 码洞 ”,了解相关信息可以关注“ codehole”微信公众号

文字与编码的奥妙(上篇)相关推荐

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

    文字的发明 文字是社会发展到一定阶段的产物.原始社会时期,人群.部落之间交流较少,有声语言已能满足需要.后来,随着社会生产的发展,人们的社会交际日趋频繁,而有声语言一发即逝,既不能传诸远方,亦不能留诸 ...

  2. 分析:windows下cmd默认的编码是ASCII编码 ,windows的中文环境下编码是GBK 方法一:在保存输出流保存的时候做一个对文字GBK编码,在输出到文件 如下 [python] view

    分析:windows下cmd默认的编码是ASCII编码 ,windows的中文环境下编码是GBK 方法一:在保存输出流保存的时候做一个对文字GBK编码,在输出到文件 如下 [python] view ...

  3. html文本编码声明,黑帽seo技术之文字HTML编码变体的实现解密

    由于跟上一篇文章有的手段接近,因此这里就一起写的话比较容易理解.我们先来上图: 可以看到,跟昨天差不多的黑帽关键词哈,这次用搜狗的,因为目前搜狗对这类站点似乎比较友好?这都不是重点,这几个站看起来像是 ...

  4. PDF格式分析(六十七) Text 文字——字符编码( Character Encoding)

    字体编码是字符代码和字形描述之间的关联关系,对于程序员来说,字符编码非常熟悉,经常遇到的乱码问题,基本上都是字符编码不正确造成的. 本章节将描述用于简单PDF字体的字符编码方案.复合字体(Type 0 ...

  5. 自动识别文字的编码以及读取所有文本——VB2005

    在VB2005中,读取文本文件中的文本可以采用的方法是System.IO.File.ReadAllText,这个函数有两个参数,一个是文件的文件名(包含路径):一个是文本的编码,如果省略,采用系统默认 ...

  6. php 文字 url编码,如何实现php中文转url编码

    如何实现php中文转url编码 发布时间:2020-08-07 10:10:03 来源:亿速云 阅读:65 作者:Leah 如何实现php中文转url编码?相信很多没有经验的人对此束手无策,为此本文总 ...

  7. 中日文字编码转换_全网最全面、全详细的编码、解码知识!!!

      温馨提示:  本文大约4282字,阅读完大概需要3-5分钟,希望您能耐心看完,倘若你对该知识点已经比较熟悉,你可以直接通过目录跳转到你感兴趣的地方,希望阅读本文能够对您有所帮助,如果阅读过程中有什 ...

  8. 中日韩大字符集文字编码的比较研究

    http://www.yyxx.sdu.edu.cn/content/guojihuiyi/guojhy-yinbs.htm 中日韩大字符集文字编码的比较研究 尹宝生 潘峰 徐立军 年新 汤蓉 沈阳航 ...

  9. Java学习笔记·Servlet parameter参数传递utf-8文字编码正常显示

    传递parameter时,正常显示各种语言文字的编码 首先设置tomcat的uriencoding为iso-8859-1(tomcat配置文件里的server.xml) <Connector U ...

  10. java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**

    原文出处:http://cmsblogs.com/?p=1412 在上篇博文(java中文乱码解决之道(一)-–认识字符集)中,LZ简单介绍了主流的字符编码,对各种编码都是点到为止,以下LZ将详细阐述 ...

最新文章

  1. Android异常与性能优化相关面试问题-内存管理面试问题详解
  2. 多线程编程: Compare And Swap (CAS)
  3. python 定时器_python 线程之四:定时器(Timer),非阻塞
  4. C语言验证6174数学问题
  5. nginx 命令_MAC 操作nginx命令
  6. Facebook开源问答系统DrQA:基于单一信源回答开放域提问
  7. [转] WPF TextBox控件中文字实现垂直居中
  8. 从零开始搭建ELK+GPE监控预警系统
  9. Centos硬盘IO性能检测命令iostat[转]
  10. MySql解决办法:2004:Can't create TCP/IP socket (24)
  11. python开发的网络调试助手_Linux/windows/mac 下的socket网络通信调试助手 UDP/TCP
  12. python读取大智慧数据_大智慧数据格式
  13. Sqlmap命令大全
  14. PPT文字怎样做断开效果和穿透效果
  15. 下一代Play Station暂名Orbis但不支持PS3
  16. int函数使用方法c语言,int函数(int函数的使用方法举例)
  17. python 北上资金_北上资金持股相关因子
  18. Elasticsearch(六)了解全文搜索
  19. 理想中2.5D的网络拓扑图
  20. 循序渐进实现仿QQ界面(三):界面调色与控件自绘

热门文章

  1. 【裂缝识别】基于matlab组合BCOSFIRE过滤器墙体裂缝识别【含Matlab源码 321期】
  2. ocr图像识别引擎_CycleGAN作为OCR图像的去噪引擎
  3. html图片在td上不能显示,动态添加表格数据和表格行到HTML,TD不显示在HTML中
  4. Jupyter notebook:如何切换Python环境
  5. 随手记--关于K-近邻算法
  6. java8 merge_给老弟讲解java8中的marge()方法,一顿骚操作
  7. linux内核 semaphore,Linux内核参数信号量semaphore设置
  8. flash 围棋_17岁攻读剑桥计算机,围棋只有业余一段,研发阿尔法狗战胜柯洁
  9. SQL Server 2012:SQL Server体系结构
  10. 学会写出"图形界面+数据库"的程序要多长时间?