编程小技巧

    返回首页    发表留言
本文作者:李德强
          技巧十九:计算机与二进制
 
 

        无极生太极,太极生两仪,两仪生四象,四象生八卦。八卦为:乾三连,坤六断,震仰盂,艮覆碗,离中虚,坎中满,兑上缺,巽下断。如果我们规定两个短横代表0,而一个长横代表1。那么八卦就可以这样描述:

坤:二进制编号000    震:二进制编号001

坎:二进制编号010    兑:二进制编号011

艮:二进制编号100    离:二进制编号101

巽:二进制编号110    乾:二进制编号111

        太极八卦应该是世界上最早使用二进制来计算的方法,它与计算机的原理如出一辙。从八卦开始学习二进制是一个不错的选择,冯诺依曼型计算机(以下简称计算机)都是二进制的。为什么采用二进制呢?因为二进制的一个位只可能是0或1,逢2进则位。所以二进制是最简单的计数方法。它比我们日常使用的十进制更加简单。这也为计算机的实现提供了简单的办法。计算机是采用高低电位来表示数字,例如规定3v电压的电位表示0,而5v电压的电位表示1。这样就可以简单的用二进制的方式进行计算了。早期的计算机是采用纸带做为输入输出或存储媒介的,纸带上打孔的位置来表示1,而未打孔的位置表示0。计算机的中央处理器(Central Processing Unit简称CPU)其根本也是通过二进制来处理所有的指令的,其实也是使用高低电位的原理。

        八卦中使用了3个存储位来表示数,它最多可以表示8个数,编码为0~7,而现代计算机通常是采用8个存储位来存放数,每一个存储位叫做bit,而8个bit表示一个字节,即byte。一个byte最多可以表示256个数(2^8)。计算机通常会使用多个byte组合到一起来表示更大的数(请参见《整型变量》)。CPU的指令也是使用二进制来设计的,例如有如下的程序代码(这个指令只是为了说明二进制程序的执行过程,这些值都不是实际的值):

00000001 00000100 00001000 00010000

第1个字节的00000001表示指令代码是一个加法运算(还有其它的减法、乘法、除法、与、或、非、异或等等指令)。

第2个字节的00000100表示第一个加数所在的内存地址。

第3个字节的00001000表示第二个加数所在的内存地址。

第4个字节的00010000表示执行加法运算后的结果存放的内存地址。

        这个4个字节的数值就可以让计算机来执行一个简单的加法运算。现在的计算机也是这样来执行程序的只不过CPU指令可能是4个字节或8个节字或更多字节来表示,内存地址使用4节字或8字节来表示。一个可以让CPU执行的指令可能占用8个字节以上。我们所编写的程序可执行的代码其实都是这样的二进制数,CPU可以读取并识别这些二进制数,并按设计好的规则来执行它们。然而这样的纯二进制数对于程序设计者说非常不方便。所以人们设计一种可以将十进制数转为二进制数的工具,可以方便的将十进制数转为二进制数。这种工具被称为程序解释器。例如:

1484 —— 十进制表示一个加法指令结果存入第一个加数所在的内存中

00000001 00000100 00001000 00010000 —— 被转为二进制的加法指令

        这样使用十进制来表示程序还是很不方便,于是人们又提升了程序解释器的功能,程序设计者可以使用一些简单的英文字母组合来表示二进制指令:

mov        $0xb800,   %ax
mov        %ax,          %es

        这种使用特定英文字母符号来表示计算机的指令被称为计算机程序代码,上面例子中的代码是汇编代码。程序代码可以由程序解释器将其转换为相应的二进制程序,这些程序解释器又被称为编译器。编译器的作用就是将程序代码编译为二进制程序。

        有了汇编代码,使得程序编写工作变得容易了一些,但编程工作还是不够简洁快速。随机计算机的发展,高级编程语言不断的出现和升级,如A语言、B语言、C语言和到后来出现的C++、Java、Python等等,使得编程工作变得更加快速有效。根据编程语言的作用大致可以分为两类:

可编译执行程序语言:代表的有汇编、C语言、C++等。

解释性语言:代表的有Java、Python、Javascript等。

        对于可编译执行语言来说,使用它们所编写的代码,可以被编译器翻译成CPU可以执行的二进制代码,这样的程序可以被CPU直接执行,所以运行速度很快。而对于解释性语言来说,它们的代码不能被翻译成CPU可执行的二进制代码,而是被编译成一种中间代码程序,这些程序必须运行在特性的软件环境下,例如Java代码编译后生成的class文件必须运行在Java虚拟机环境下,也就是Java virtual machine。而Java虚拟机程序是运行在操作系统平台上的一种应用软件,所以这种解释性语言所编译的程序运行速度通常都不是很快。

 

        今天的小技巧你学会了吗?

 

 

 

 

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号