标签:二进制 自动 一个 man 高级 机制 编译器 可靠性 standard
6.1语句与公式
6.2符号的模拟——算术
6.3符号的规则操作——计算
6.4二进制的应用——现代计算机
所有进制的位置记数法原理上等价,实践中不同进制的记数法有不同的适用性。二进制是用0、1这两个数字,以及逢二进一的规则来表示所有的数。十进制与二进制相比,十进制的数字长度更短,更容易辨识书写,另一方面十进制的应用需要掌握比二进制应用更复杂的加法表与乘法表。
二进制的发明追溯至莱布尼茨。莱布尼茨对二进制情有独钟,用法国数学家、物理学家拉普拉斯(Laplace,1749.3-1827.3)的话说:“莱布尼茨在他的二进位算数中看到了宇宙创始的原象。他想象1表示上帝,0表示虚无。上帝从虚无中创造出所有实物,恰如在他的数学系统中用1和0表示了...”。这倒是暗合了二进制在现代神奇的应用之旅。二进制的基础符号0、1,正好可对应逻辑真值的假、真表示,在“逻辑与语法”一节,布尔代数中的与、或、非运算是通过真值表定义,抽象地看,二进制个位上加法运算可以看作与布尔代数同系列的运算,只是算子不一样且有进位问题。
0、1与现代电子技术里的电路与电子器件的特性相匹配。1、0可正好对应电路的开与关,电脉冲的有与无,电平的高与低,利用这一特性,技术上可由继电器实现与门、或门、非门的数字逻辑电路,实现布尔代数运算。利用异或门的数字电路可以模拟出二进制的加法运算,理论上减法是加法的逆运算,乘法运算是连加运算,除法是乘法的逆运算,技术上通过补码等方法,可以将四则运算都归为加法运算。
人类神经系统是神经元(神经细胞)通过突触相互连接成的神经网络,单个神经元与突触工作机制也符合二进制的方式:输入一个信号,神经元或者激活,或者抵制;激活的神经元或者通过突触向连接临近神经元输出一个信号,或者不输出。这是一个刺激人工智能研究的描述,这样概括神经元与突触的工作,是否漏了其它的要点,是否能支持起神经网络整体复杂性的解释,下不了肯定的结论。
二进制的二个基础符号:0、1,形成了一个基础的对立,利用这一对立以及线性空间理论上不受限制的位数,我们可以对任意信息用二进制来编码,比如英文的26个字母或中文的每个字都可以通过ASCII (American Standard Code for Information Interchange)码或Unicode码与一个8位或16位的二进数对应,从而每一英文单词,或中文词对应一个二进制的编码。这些信息的二进制编码,也称为内码,同样可以由电子器件物理地实现,存放于计算机的存储器
现代计算机由存储器、运算器、控制器、输入设备和输出设备5部分组成,构成下图的结构:
这个系统经常称为冯·诺依曼系统((Von Neuman,1903.12-1957.2,美籍匈牙利数学家)。系统实现的是“存储程序计算机”的思想:
将程序与数据预先输入存放在存储器
控制器从存储器里逐条取出程序,解析后送入运算器执行
这里的程序是一个指令集,每一条指令可分为二个部分
操作码就是对应计算机的基本操作,主要就是运算器的运算操作,操作数的地址码是存储器的一个地址,对应地址里存放有操作码要操作的数。操作码、操作数地址、地址里操作数,所有这些最终是以二进制形式告知计算机,再译成对应的电信号,驱动硬件运行。
运算器又称算术逻辑单元ALU(Arithmetic Logic Unit),原理上就是前面所说继电器的数字逻辑电路发展来的,所完成的就是算术四则运算与逻辑运算,配套上还有移位、比较与传输操作,以及更多技术实现上的细节。今天计算机的应用遍及各行各业,所处理的问题也越来越复杂,很多领域的程序复杂度与可靠性是人类难以预测与控制的,所有这些应用中计算机主要做的处理最后都是编译为算术逻辑单元的逻辑、数学计算。
可存储运行不同的程序,处理不同的问题,体现的是通用图灵机的概念。实现通用图灵机还要满足图灵完备的要求,简单地说就是要支持分支与循环的流程处理以及具备足够的内存。
我们之前说的都是符号,现在说到的是物理的过程与状态,这是由人设计实现的。设计实现这些物理过程与状态,起源是对符号操作过程与结果的一种模仿与表现。你也可以把这看作是一种语言形式,符号是继电器、句型是门电路,语句则是电脉冲经过门电路过程。相对的,原来的语言符号也只是另一种人造的物理过程与状态,二者区别在于:后者是面向人的理解与操作的,前者是面向机器自动操作,由此细节上二者有更多的不同。如果一个符号表达及其演算过程,可以反映实际的物理的现象A,也可以反映实际的物理过程B,那么可以利用B的过程来模拟A,忽略可能的误差,这与符号的过程等价。甚至没有符号与演算可以用来表现,能确定A与B过程的相似,就可以用B来表现A,实际的例子如风洞。
继电器、门电路替换了更早的石子、绳结、木珠、绳网、算盘等,计算也从手动机械的操作进步为机器自动的操作,这是一个大的跨越。操作是机器自动执行的,要进行什么操作还得人告诉计算机。机器本身只懂得二进制,没人愿意输入二进制码告诉计算机做什么,这样的工作太枯燥,于是人们发展了高级编程语言用来编写程序。高级编程语言是更接近于自然语言,或接近领域原生的表示方式的编程语言,高级语言编写的程序通过编译器或解释器的解析,翻译为机器可执行的二进制目标代码。编程语言是真实在用的人工语言,且数量众多。高级语言的编程回到用一种人工语言符号来模拟机器物理过程,因此每一实用的高级语言也会要求满足图灵完备,即支持分支、循环的语句。各类计算机编程语言的通用语法采用的是巴斯克范式(BNF范式),BNF范式等价乔姆斯基的第2型文法,即上下文无关文法,前面说过,这型语法对应的自动机就是图灵机。
再来看编译器的工作。编译器所做的是分析编程语言编写的程序,包括词法、语法的分析,语义的分析(这是常见的说法,是否正确先忽略),其中所用的方法很多与自然语言分析中所用的方法类似。比如将语句分析为语法树,分析基于给定的文法:G=(N,∑,P,S),从结果来看:语法树的每一叶子节点对应了终结符集中的一个,每一中间节点对应了非终结符集中的一个,中间节点到中间节点或叶子节点会对应一个产生式规则。编译器完成分析后,经过优化后生成目标代码。在这些领域的设计工作,乔姆斯基的形式文法是基础的理论与工具,并有着良好的应用效果,相比较,它们在自然语言的应用没有太多的进展。
(作者(LQS)注:连续地阅读会发现,系列的文章不是对各个问题的解释,而是新的理解视角)
标签:二进制 自动 一个 man 高级 机制 编译器 可靠性 standard
原文地址:https://www.cnblogs.com/CHARACTER2/p/13176447.html