1.3 语言概述

一提到语言这个词,人们自然会想到像英语、汉语这样的自然语言,因为语言是人和人相互交流信息不可缺少的工具。而今天,计算机遍布了我们生活的每一个角落,除了人和人之间的相互交流之外,我们还必须和计算机交流。用什么样的方式才能和计算机做最直接的交流呢?人们自然想到的是最古老同时也是最方便的方式——语言。

1.3.1 什么是语言

类比人类的语言,如汉语、英语、法语等,可以总结出语言有如下特点:

(1)语言是用来交流沟通的。有一方说,有另一方听,必须有两方参与,这是语言最重要的功能。语言就是用来表达意思、传递信息的。说的一方传递信息,听的一方接受信息;说的一方下达指令,听的一方遵从命令做事情。没有语言,双方就很难交流沟通。

(2)语言有独特的语法规则,交流双方都必须了解并遵守这些规则。一个只会说汉语的中国人,和一个只会说法语的法国人,如果戴上面具,只通过嘴巴发出声音互相交流,结果一定是鸡同鸭讲,信息完全传递不出去。为什么?因为互相不知道对方的语法规则,当然听不懂了。为什么要戴面具?为什么只能通过嘴巴?因为人类的一些面部表情,身体动作,这些是相通的,不通过声音,而通过肢体语言也能多少表达出一些意思。

1.3.2 什么是机器语言

计算机是一个忠实的仆人,时刻等候着主人的命令。如何才能使计算机听话呢?当然是用计算机听得懂的语言去命令它了。计算机的大脑就是CPU,它控制着整个计算机的运作。每种CPU都有自己的指令系统。这个指令系统就是该CPU的机器语言。机器语言是一组由0和1系列组成的指令码,这些指令码是由CPU制作厂商规定出来的,然后发布出来请程序员遵守。如下面是某CPU指令系统中的两条指令:

1000000         加
1001000         减

要让计算机完成相应的任务,就得用这样的语言去命令它。这样的命令不是一条两条,而是上百条。由于不同型号的计算机的指令系统即机器语言是不相通的,按一种计算机的机器指令编制的程序,不能在另一种计算机上执行。

用机器语言编写程序,编程人员首先要熟记所用计算机的全部指令代码和代码的含义。在编写程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分烦琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是由0和1组成的指令代码,不仅直观性差,还容易出错(读者可参考图1-1中所示的机器语言部分)。

1.3.3 什么是汇编语言

在用机器语言编程的实践过程中,一批顽强而聪明的先行者终于发明了汇编语言——一门人类可以比较轻松掌握的编程语言。只是这门语言计算机并不懂,人类还不能用这门语言命令计算机做事情。

所以,有一类专门的程序,既懂机器语言,又懂汇编语言,而且还很聪明,知道怎么把汇编语言翻译成机器语言。于是,人类和计算机间又有了一种新的交流方式,而且人类可以比较轻松地编写程序了。

上文提到过,不同的CPU有不同的指令系统,从而就有不同的机器语言与之一一对应。计算机硬件不同,机器语言就不同,汇编语言也不同。所以程序员用汇编语言编写程序,都要记住是在什么CPU上编写的。程序员不仅要考虑程序设计思路,还要熟记计算机内部结构,这种编程的劳动强度依旧很大。为了使读者对机器语言和汇编语言的表现形式有个感性认识,笔者截取了Visual C++.NET在调试的时候所看到的汇编语言窗口,如图1-1所示(读者现在不必太在意它们的具体含义)。

图1-1 在调试界面中的机器语言、汇编语言、C语言

1.3.4 面向过程的语言

汇编语言和机器语言都是面向机器的,机器不同,语言也不同。既然有办法把汇编语言翻译成机器语言,难道就不能把其他更人性化的语言翻译成机器语言吗?1954年,Fortran语言出现了,其后相继出现了其他的类似语言。这批语言使程序员摆脱了计算机硬件的桎梏,把主要精力放在了程序设计上,不再关注底层的计算机硬件。这类语言称为高级语言。同样的,高级语言要被计算机执行,也需要由一个翻译程序将其翻译成机器语言,这就是编译程序。

这类高级语言解决问题的方法是,分析出解决问题所需要的步骤,把程序看成数据被加工的过程。基于这类方法的程序设计语言称为面向过程的语言。C语言就是一种面向过程的程序设计语言。

1.3.5 什么是C语言

如果读者对C语言的历史感兴趣,可以参考其他相关书籍。本书不再罗列众人皆知的事实了。

一般来说,C语言可以简称C(注意,C是大写的)。至于什么是C语言,请读者自学完本书后下一个定义吧。