0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

古人哲学与现代计算机信息编码不谋而合

Q4MP_gh_c472c21 来源:嵌入式ARM 作者:嵌入式ARM 2020-12-03 09:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. 中国古老的阴阳八卦

首先我们看看《易传·系辞上传》,“易有太极,是生两仪,两仪生四象,四象生八卦。”从以下这个图就很好理解:

细心的你也许会发现,这是二进制的级数增长,这不就是1,2,4,8么!

再看看,《道德经》:道生一,一生二,二生三,三生万物。 这段话,其实跟《易传》的很像,意思是:

道是独一无二的,道本身包含阴阳二气,阴阳二气相交而形成一种适匀的状态,万物在这种状态中产生。

理工科出身的我,很容易想到,阴阳便是0和1,阴阳的相交,即0和1的组合,便可产生万物(计算机里面的一切)。 很多书都讲这是古人的宇宙生成论或者是朴素的哲学概念,但这跟计算机里面的二进制原理为什么这么相似,这么巧合? 2. 过去的信息传递在没有电话和计算机的年代,人们是怎么记录或传递信息的?狼烟烽火用来传递敌情(有和无)

类似的,还有纸鸢(风筝)。现在中国风筝有俩流派,即“北潍坊,南阳江”。

结绳

人们用来计数记事和传递信息。文字产生之前人们用来记数记事和传递信息的方法。相传大事打大结,小事打小结。

击鼓鸣金看《三国演义》就会知道,里面多次提到击鼓和鸣金。不同的方式和节奏传递不同的信息。

旗语在军事上也用的非常多。

故夜战多火鼓,昼战多旌旗,所以变人之耳目也。

《孙子兵法》

诸如此类的,还有很多很多,如飞鸽传书、鱼传尺素等。 3. 近现代的电子信息首先看看电报

欧洲的科学家在18世纪逐渐发现电的各种特质。同时开始有人研究使用电来传递讯息的可能。早在1753年,一名英国人便提出使用静电来拍发电报。

还有摩斯密码

摩尔斯电码也被称作摩斯密码,是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,是一种早期的数字化通信形式。不同于现代化的数字通讯,摩尔斯电码只使用零和一两种状态的二进制代码,它的代码包括五种:短促的点信号“・”,读“滴”(Di)保持一定时间的长信号“—”,读“嗒”(Da)表示点和划之间的停顿、每个词之间中等的停顿,以及句子之间长的停顿。

电子计算机到1946年,世界第一台电子计算机诞生了。它是一个庞然大物,用了18000个电子管,占地170平方米,重达30吨,耗电功率约150千瓦,每秒钟可进行5000次运算。 这个功能性能,从现在看来虽然很渣,但是其诞生具有划时代意义。 发明计算机的同学们用8个晶体管的“通”或“断”组合出一些状态来表示世间万物。

在这里,不得不提一个人——冯·诺依曼。他是匈牙利裔美籍数学家、物理学家、计算机科学家,在计算机、博弈论、核武器和生化武器等领域的全才之一,被后来人称为“计算机之父”和“博弈论之父”。 我们今天用到的计算机,都是基于冯诺依曼体系结构的。4. 字节讲了这么多,现在开始讲字节,开始之前,先复习下几个概念:

比特(bit):也可称为“位”,是计算机信息中的最小单位,是 binary digit(二进制数位)的缩写,指二进制中的一位

字节(Byte):计算机中信息计量的一种单位,一个位就代表“0”或“1”,每8个位(bit)组成一个字节(Byte)

字符(Character):文字与符号的总称,可以是各个国家的文字、标点符号、图形符号、数字等

字符集(Character Set):是多个字符的集合

编码(Encoding):信息从一种形式或格式转换为另一种形式的过程

解码(decoding):编码的逆过程

字符编码(Character Encoding):按照何种规则存储字符

我们知道字节(Byte)是计算机信息存储的基本单位,它由8个位(bit)组成。但是,为什么是8个位,而不是三个四个,也不是九个十个? 网上很多都说是因为ASCII,其实不是,这不是因果关系。 位(bit),一个位只有两种状态,0和1,可表示晶体管的“通”和“断”,计算机的存储和逻辑就是通过这些晶体管的“通”和“断”来表达。 早期的计算机是用来做数学运算的,数字就0~9,其实4个bit就足够了,可以通过BCD码的方式来表达数字。 但是,不能用4个bit来表示一个Byte啊,4个bit表示数字还好,其他字母呢,那得用两个byte来表示,跨byte访问,会降低效率啊。 历史上,早期的Byte的大小没有固定的标准,其很大程度依赖于硬件设计,使用1到48位的情况都有,但比较常用的是6位(BCDIC)。使用6位和9位的计算机在19世纪60年代非常常见,这些系统通常具有12、18、24、30、36、48或60位的存储。

4位和6位也是在早期比较常用的,它们当时被用在美国陆军(FIELDATA)和海军常见的可打印图形模式。这些表示包括字母数字字符和特殊的图形符号。这些集合在1963年扩展为7位编码,称为美国信息交换标准代码(ASCII),称为联邦信息处理标准,取代了1960年代美国政府和大学不同部门使用的不兼容的电传打印机代码。这个就是ASCII的由来。呵呵,ASCII字符其实用7位就够了,不是8位哦。

那么今天的8位Byte是怎么来的呢? 这就要提到System/360了。在十九世纪60年代初期,IBM同时积极参与ASCII标准化,同时在System/360产品线中引入了八位扩展二进制编码十进制交换码(EBCDIC),这是对六位二进制编码十进制(BCDIC)的扩展。IBM突出的表现,逐渐就让8位Byte普及开来了。

但是呢,这个EBCDIC和ASCII是不一样的哦。 十九世纪70年代八位微处理器的发展普及了这种存储容量。早期的计算机如Intel的8088、8086是可以通过4位访问的哦,那时叫做半字节。 也许你用过8位单片机,但是你听说过4位单片机吗?哈哈!5. 进制我们最熟知的是十进制,从小接触的数字和算术计算用的都是十进制。然后学到信息计算机相关知识了,就开始接触或认识二进制。上面也提到了,阴阳八卦用的就是二进制。其实二进制普遍存于大自然中,也存在于生活中。 那么除了十进制、二进制,还有哪些进制呢?八进制、十六进制等等。

这些都是程序员熟悉的。 讲了这么多,什么是进制? 进制就是进位计数制,是人为定义的带进位的计数方法。十进制是逢十进一,二进制是逢二进一,十六进制是逢十六进一,那么X进制就是逢X进一了。 进制在数字上怎么表示? 也很简单,进制小于10的,用阿拉伯数字就很容易表达出来。

如:十进制:0, 1, 2, 3,4, 5, 6, 7, 8,9,10。这个10就是逢十进一变成两位数了。八进制:0, 1,2,3,4,5, 6,7,10。这个10就是逢八进一变成两位数了,按数值计算,这个八进制的10相当于十进制的9,是表达形式变了。二进制:0, 1,10。这个10就是逢二进一变成两位数了。 那么进制大于10的呢,如十六进制怎么表示?十六进制:0, 1,2,3,4,5, 6,7,8,9,A, B, C, D, E, F, 10。这个10就是逢十六进一变成两位数了。因为阿拉伯数字没有单一数字表达的10, 11, 12, 13, 14, 15,所以采用A, B, C, D, E, F来表达,只是表达形式不一样而已。 上面我们提到了个BCD码,啥是BCD码?十六进制又是什么鬼?

十进制 二进制 八进制 十六进制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 100 10

于是,可以约定,这些进制的表达方式,不然10到底是几进制的表达的数字是多少都不知道。 二进制用B(Binary)来表达,如1001B,但是编程语言中最小的单位是Byte,所以没有约定表达二进制的方法。 八进制用O(Oct)来表达,写成123O?这个O和0写法相近,会让人误解的,好困惑哦。在编程语言中,通常在数字前面加个0,即0123表示八进制的123,注意跟十进制的123不相等哦。 十六进制用H(Hex)表示,如2BH,编程语言中用0x开头来表示,如0x2B。 这里为什么提二进制、十进制、八进制和十六进制呢?

十进制刚才说了,是最常见接触最多的进制,而二进制是计算机的基本进制,但计算机通常以8 Bit的Byte来作为基本单位,那么一个Byte的刚好可以表示16个数,所以,十六进制是非常常用的,而八进制就是对于半个Byte了。 好了,问题来了,除了这些常见了,有没有三进制呢,十七进制呢?答案是有的,随你喜欢,多少都行。 Python中有个int的内置函数,可以转换各种进制。以下看看100这个数在各个进制中对应的十进制数值是多少。

>>> int('100', 2)4>>> int('100', 3)9>>> int('100', 4)16>>> int('100', 7)49>>> int('100', 8)64>>> int('100', 10)100>>> int('100', 16)256>>> int('100', 17)289>>> int('100', 35)1225>>> int('100', 36)1296>>> int('100', 55)Traceback (most recent call last): File "", line 1, in ValueError: int() base must be >= 2 and <= 36这个内置函数int只能算大于等于2并小于等于36进制的数。6. BCD码上文提到了个BCD码,这是什么鬼?

BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。

如果不懂这个概念,要认真读几次上面这段话。简单地理解为,1位十进制数码用4位二进制数来表示,但根据这1位十进制数码和4位二进制数的对应关系(或者表达关系)不一样而有不同的形式,如8421码、2421码、5421码和余3码、余3循环码、格雷码,其中前面三种是有权码,后面三种是无权码。

有权码,自然二进制代码是按照二进制代码各位权值大小,以自然向下加一,逢二进一的方式来表示数值的大小所生成的代码。

显然,n位自然二进制代码共有2^n种状态取值组合,由于代码中各位的位权值分别为2^3,2^2,2^1,2^0,即8421,所以也称为8421码。这样每位二进制码元都有确定位权值的编码,称为有权码,属于恒权代码。相应的,没有确定位权值的编码叫无权码,也叫非恒权代码。

百度百科——有权码

8421码8421 BCD码是最基本和最常用的BCD码,0~9的8421码与4位自然二进制形式完全一样,即用0000~1001分别代表它所对应的十进制数。要计算一个多位的8421码可以每位单独拆分出来,并算出对应的二进制码(不足四位前面补0),然后拼起来即可。举个例子: 8421码:235,拆分出来是2、3、5,分别对应二进制是0010、0011、1001,拼起来是0010 0011 1001。

5421和2421

5421 BCD码和2421 BCD码,这两种有权BCD码中,有的十进制数码存在两种加权方法,例如,5421 BCD码中的数码5,既可以用1000表示,也可以用0101表示;2421 BCD码中的数码6,既可以用1100表示, 也可以用0110表示。这说明5421 BCD码和2421 BCD码的编码方案都不是惟一的。 下面列举8421码、2421码、5421码和一位十进制数的对照关系。

十进制数 8421码 5421码 2421码
0 0000 0000 0000
1 0001 0001 0001
2 0010 0010 0010
3 0011 0011 0011
4 0100 0100 0100
5 0101 1000 1011
6 0110 1001 1100
7 0111 1010 1101
8 1000 1011 1110
9 1001 1100 1111

余3码和余3循环码余3码实很简单,是8421 BCD码的每个码组加3(0011)形成的。为什么有余3码这个东西呢,实际上其常用于BCD码的运算电路中。 余3循环码实际上是变权码,每一位的1并不代表固定的数值,十进制数的余3循环码就是取4位格雷码中的十个代码组成。 那么什么是格雷码?格雷码格雷码(Gray Code),其由很多曾用名,如格莱码、戈莱码、循环码、反射二进制码、最小差错码等。 格雷码有很多种表现形式

为什么要用格雷码呢?

格雷码是一种具有反射特性和循环特性的单步自补码,其循环和单步特性消除了随机取数时出现重大错误的可能,其反射和自补特性使得对其进行求反操作也非常方便,所以,格雷码属于一种可靠性编码,是一种错误最小化的编码方式,因此格雷码在通信和测量技术中得到广泛应用。

格雷码属于可靠性编码,是一种错误最小化的编码方式。因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。

格雷码Gray Code详解(https://www.cnblogs.com/zhuruibi/p/8988044.html)

怎么计算格雷码? 二进制码→格雷码(编码): 此方法从对应的n位二进制码字中直接得到n位格雷码码字,步骤如下:

对n位二进制的码字,从右到左,以0到n-1编号

如果二进制码字的第i位和i+1位相同,则对应的格雷码的第i位为0,否则为1(当i+1=n时,二进制码字的第n位被认为是0,即第n-1位不变)

责任编辑:xj

原文标题:古人哲学居然与计算机信息编码不谋而合?

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    809

    浏览量

    42799
  • 编程
    +关注

    关注

    90

    文章

    3708

    浏览量

    96777
  • 信息编码
    +关注

    关注

    0

    文章

    9

    浏览量

    9376

原文标题:古人哲学居然与计算机信息编码不谋而合?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工控机与普通计算机的核心差异解析

    在工业自动化和智能制造领域,计算机设备作为核心控制单元,其选择直接影响整个系统的稳定性与可靠性。工控机与普通计算机虽同属计算设备,但其设计目标、性能侧重和应用场景存在根本性差异。准确理解这些差异,是进行正确设备选型的基础。
    的头像 发表于 11-25 14:45 1260次阅读
    工控机与普通<b class='flag-5'>计算机</b>的核心差异解析

    【作品合集】赛昉科技VisionFive 2单板计算机开发板测评

    赛昉科技VisionFive 2单板计算机开发板测评作品合集 产品介绍: 昉·星光 2是全球首款集成了3D GPU的高性能量产RISC-V单板计算机,搭载昉·惊鸿-7110(型号:JH-7110
    发表于 09-04 09:08

    工业计算机的重要性

    工业计算机对某些行业至关重要。我们将在下面详细解释这些行业中的工业计算机应用。1.制造与工业自动化工业级计算机非常适合制造工厂,特别是那些想要自动化装配过程的工厂。在这样的环境中,工业计算机
    的头像 发表于 07-28 16:07 401次阅读
    工业<b class='flag-5'>计算机</b>的重要性

    自动化计算机经过加固后有什么好处?

    让我们讨论一下部署坚固的自动化计算机的一些好处。1.温度范围宽自动化计算机经过工程设计,配备了支持宽温度范围的组件,使自动化计算解决方案能够在各种不同的极端环境中运行。自动化计算机能够
    的头像 发表于 07-21 16:44 431次阅读
    自动化<b class='flag-5'>计算机</b>经过加固后有什么好处?

    自动化计算机的功能与用途

    工业自动化是指利用自动化计算机来控制工业环境中的流程、机器人和机械,以制造产品或其部件。工业自动化的目的是提高生产率、增加灵活性,并提升制造过程的质量。工业自动化在汽车制造中体现得最为明显,其中许多
    的头像 发表于 07-15 16:32 536次阅读
    自动化<b class='flag-5'>计算机</b>的功能与用途

    工业计算机与商用计算机的区别有哪些

    工业计算机是一种专为工厂和工业环境设计的计算系统,具有高可靠性和稳定性,能够应对恶劣环境下的自动化、制造和机器人操作。其特点包括无风扇散热技术、无电缆连接和防尘防水设计,使其在各种工业自动化场景中
    的头像 发表于 07-10 16:36 526次阅读
    工业<b class='flag-5'>计算机</b>与商用<b class='flag-5'>计算机</b>的区别有哪些

    NVIDIA驱动的现代超级计算机如何突破速度极限并推动科学发展

    现代高性能计算不仅使得更快的计算成为可能,它正驱动着 AI 系统解锁更多领域的科学突破。 高性能计算经历了多次迭代,每一次都源于对技术的创造性再利用。例如,早期的超级
    的头像 发表于 06-26 19:39 987次阅读
    NVIDIA驱动的<b class='flag-5'>现代</b>超级<b class='flag-5'>计算机</b>如何突破速度极限并推动科学发展

    工业计算机如何设计用于冲击和振动

    工业计算机是为挑战消费级系统耐用性的环境构建的。在制造业、运输业、国防和采矿业等领域,计算机面临着持续的冲击、振动和其他物理压力。设计这些系统以在这种条件下保持可靠需要卓越的工程和创新技术。本文
    的头像 发表于 05-19 15:27 367次阅读
    工业<b class='flag-5'>计算机</b>如何设计用于冲击和振动

    一文带你了解工业计算机尺寸

    工业计算机现代自动化、人工智能(AI)和边缘计算的支柱。这些坚固耐用的系统旨在承受恶劣的环境,同时为关键应用提供可靠的性能。然而,由于有这么多可用的外形尺寸,为您的工业计算机选择合适
    的头像 发表于 04-24 13:35 795次阅读
    一文带你了解工业<b class='flag-5'>计算机</b>尺寸

    计算机网络入门指南

    计算机网络是指将地理位置不同且具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
    的头像 发表于 04-22 14:29 1867次阅读
    <b class='flag-5'>计算机</b>网络入门指南

    NVIDIA 宣布推出 DGX Spark 个人 AI 计算机

    台式超级计算机由 NVIDIA Grace Blackwell 驱动,为开发者、研究人员和数据科学家提供加速 AI 功能;系统由头部计算机制造商(包括华硕、Dell Technologies、HP
    发表于 03-19 09:59 504次阅读
       NVIDIA 宣布推出 DGX Spark 个人 AI <b class='flag-5'>计算机</b>

    Quantinuum“Reimei”量子计算机在RIKEN正式运行

    近日,东京——全球领先的集成量子计算公司Quantinuum与日本顶尖的综合研究机构RIKEN共同宣布,Quantinuum的“Reimei”量子计算机已在RIKEN Wako园区(位于日本埼玉县
    的头像 发表于 02-17 10:21 801次阅读

    工业计算机的定义与重要性

    运行。随着现代产业向智能化、自动化和数据化的转型,工业计算机在制造业、交通运输、能源、电信等多个领域中扮演着越来越重要的角色。工业计算机的广阔应用促进了生产效率的提
    的头像 发表于 12-25 15:11 981次阅读
    工业<b class='flag-5'>计算机</b>的定义与重要性

    云端超级计算机使用教程

    云端超级计算机是一种基于云计算的高性能计算服务,它将大量计算资源和存储资源集中在一起,通过网络向用户提供按需的计算服务。下面,AI部落小编为
    的头像 发表于 12-17 10:19 964次阅读

    专业的第三类医疗器械经营企业计算机系统,确保规无忧

    第三类医疗器械经营企业计算机系统因其简单明了的特性受到了众多用户的欢迎。与其他第三类医疗器械经营企业计算机系统相比,盘谷医疗的快速上手为用户提供了极大的便利。该系统还支持远程操作,用户可以随时随地对医疗器械进行进销存管理。
    的头像 发表于 12-12 16:05 703次阅读
    专业的第三类医疗器械经营企业<b class='flag-5'>计算机</b>系统,确保<b class='flag-5'>合</b>规无忧