二进制在计算机内是如何运作的

通过学习编程语言,我们都知道编译器的工作是把编程语言翻译为计算机所能识别和执行的机器语言,机器语言通过二进制代码所表示,但是,计算机为什么要使用二进制呢,0和1在计算机内又是如何工作的呢?

1. 为什么选择二进制?

这就要从计算机的基本电子元件——晶体管来说起,晶体管可以看作一种电子开关,通过控制线路来控制开和关,晶体管有两个电极,由半导体材料将它们隔开。

haproxy二进制 二进制代码怎么运行_其他


控制线连接到一个门,通过改变它的电荷(高低电平),来控制半导体的导电性,来决定是否让电流流动,即开与关,再通过0和1两种状态表达信息,从而达到传递信息的目的。高电平导致电路导通,通电代表‘1’,低电平导致线路不通,闭电代表‘0’。但是,为什么三进制、五进制、十进制不行呢?问题在于,可表达的数字越多,状态越多,就越难区分信号,极容易造成信号混乱,特别是对每秒数百万次变化的晶体管来说,问题更为严重。所以只有0和1两种状态,可以更好的解决这类问题。(值得注意的是,数字电路只能识别高低电平,0和1只是起标记作用,是抽象的,并不存在。)

采用二进制的另一个原因,数学界中已经有一门数学分支——布尔代数,来专门处理真(1)和假(0)这类逻辑操作问题,并且这门学科已经解决了所有法则和运算,使得二进制的问题更便于处理。布尔代数能够很好地处理集成电路中的逻辑门问题。逻辑门包括或门、与门、非门、或非门、与非门。逻辑门通过晶体管的组合和不同的逻辑关系来实现高低电位的转换。

2. 二进制在计算机内是如何工作的?
通过上一个问题,或许有些人已经明白了二进制在计算机内是如何运作的了,但或许很多人还是没明白,1和0串是符号,计算机电路怎么识别?其实所谓的编程和编译,本质上不是对0和1数字串的翻译,虽然很多书本为了让人理解这一过程而这么说的。例如输入字符‘a’,便会在i/o控制器上产生高高低低的电平,也就是我们所抽象出来的一堆0和1,而后再通过ASCII码将其转化为字符‘a’所代表的65的二进制01000001,再通过另一组i/o传给CPU。一系列的这种过程就叫编程,这些所有的电压信号都存储在相应的存储单元中,当我们要进行编译时,便通过鼠标点击编程软件的翻译栏,这个过程,看着是你点了翻译栏软件发出了命令,实际上是鼠标输出了某个电压信号发出了命令,这个电压信号触发了半导体开关,连接起了所有储存了高高低低电平的存储半导体单元。当你点击运行的时候,鼠标发出了电压信号,由信号触发启动开关,存储了高高低低电平的半导体电路元件才开始电路上的运行。我们所见到的软件等等运行也与此类似,但其实根本没有软件,软件只是抽象出来的,本质还是由硬件和电路所操纵的。

3. 补充
或许有人还是不懂晶体管和高低电压的关系,打个比方,计算机的早期是在纸带上打孔,利用光敏元件在有无光时电阻不同的特性,来实现高低电压的转换,从而决定电路的通断,也就是0、1。如果说输出是个额定电压为5v的继电器的话,如果电源是6V,光照时,光敏元件分得0.1V,继电器就可以闭合了;如果不光照,光敏分得1.2V,那继电器就无法闭合。这个继电器就可以控制其它电路的通断。成千上万个纸带在同一时间运行,便可产生不同的通断状态,从而产生我们所想要的信息。晶体管用半导体代替了继电器。