



计算机作为现代社会中不可或缺的重要工具,其高效运算能力和多功能特性源于其科学的设计与运行原理。理解计算机的原理不仅有助于读者深入掌握计算机技术,还能帮助开发和优化计算机系统,以应对不断变化的需求。
计算机的基本结构是其能高效完成各种计算与任务的基础,由多个组件和模块组成。这些组件协同工作,实现对信息的输入、处理、存储和输出。现代计算机的基本结构大多基于“冯·诺依曼架构”,这一架构奠定了计算机设计的理论基础。由于其对计算机设计思想的突出贡献,冯·诺依曼被誉为“现代电子计算机之父”。
冯·诺依曼(John von Neumann)是现代计算机科学的奠基人之一。在第一台实际意义上的电子计算机ENIAC(Eiectronic Numerical Intergrator And Computer,电子数字积分计算机)研制成功后,冯·诺依曼开始研制EDVAC(Electronic Discrete variable Automatic Computer,离散变量自动电子计算机),并成为当时世界上计算速度最快的计算机。
冯·诺依曼的贡献不仅在于计算机的研制过程,其对于计算机的设计思想一直影响到现在。他在1945年提出了一种革命性的计算机设计理念,即“存储程序控制计算机”。该设计的核心思想是将数据和指令都存储在计算机的同一存储器中,并通过中央处理单元按顺序执行指令。这一架构的主要特点如下。
存储程序概念:
计算机将程序和数据一起存储在内存中,以便动态读取和处理。
顺序执行:
计算机按照指令存储的顺序逐步执行,除非遇到特定的跳转指令。
基本结构:
系统由运算器、逻辑控制装置(控制器)、存储器、输入设备和输出设备组成。
冯·诺依曼架构的意义
冯·诺依曼架构使计算机的设计更加简洁、统一,并奠定了现代计算机科学的理论基础。其存储程序的概念提高了计算机的灵活性和可编程性,也为后来的计算机技术发展指明了方向。现代计算机虽然在某些方面(如多核处理器、并行计算等)有所突破,但其核心设计仍然继承了冯·诺依曼架构的思想,成为计算机发展的基石。
在计算机的组成结构中,冯·诺依曼将计算机分为5个组成部分,如图2-11所示,也就是计算机的基本结构。
图2-11
运算器是计算机执行算术和逻辑运算的核心部件,它负责处理数据的加、减、乘、除以及逻辑判断等操作。运算器直接与控制器协同工作,完成程序执行过程中的大量计算任务。现代计算机中的运算器不仅具备强大的运算能力,还通过优化结构提升了效率,为整个计算机系统提供快速精确的运算支持。
逻辑控制装置(控制器)是计算机的“指挥中心”,负责协调和管理各部件的运行。它从存储器中提取指令并进行解码,通过一系列信号控制运算器、存储器、输入设备和输出设备的协作,以确保计算机能够有序高效地执行任务。控制器的设计直接决定了计算机的运行效率,是现代计算机性能提升的重要突破点之一。
两者的结合
现在的计算机中已经没有单独的运算器或控制器了,而是将两者的功能结合起来,这个设备就是前面介绍的CPU。
存储器是计算机用于保存数据和程序的核心部件,可分为主存储器和辅助存储器两大类。主存储器(如内存)用于存储运行中需要的数据,其速度快,但数据会在断电后丢失;辅助存储器(如硬盘)则负责长期保存数据,虽然速度较慢,但容量更大。存储器的性能对计算机的整体运行效率影响重大,是冯·诺依曼架构中不可或缺的一部分。
输入设备将用户的指令和数据转换为计算机可以识别的形式,是人机交互的重要桥梁。常见的输入设备包括键盘、鼠标、扫描仪和摄像头等,通过这些设备,用户能够将需求传递给计算机,推动程序的执行与操作。输入设备的多样化和智能化,显著提升了计算机的适用性与操作便捷性。
输出设备是将计算机的处理结果呈现给用户的工具,以文本、图像、声音等形式展示信息。常见的输出设备包括显示器、打印机和扬声器等,它们直接影响用户体验和信息传递的效果。输出设备的性能在不断提升,为用户提供更为直观和高效的结果展示方式,是计算机功能不可或缺的一部分。
计算机的工作原理以“冯·诺依曼架构”为基础,遵循存储程序和逐步执行的基本思想。计算机的运行主要分为输入、存储、处理和输出4个阶段,每个阶段由不同的硬件和软件模块协同完成。下面通过细化各步骤,解析计算机的具体工作流程。
输入阶段是计算机获取数据和指令的起点。通过输入设备(如键盘、鼠标或传感器),用户或外部设备将数据传递给计算机系统。输入数据会先经过模数转换(若为模拟信号)或直接转换为二进制编码形式,以便后续处理。
存储阶段是计算机工作的重要环节。输入的数据和指令被传递到存储器中,分为主存储器(如RAM)和辅助存储器(如硬盘)。主存储器用于存放当前正在处理的数据和程序,辅助存储器则保存长期数据。控制器通过地址总线和数据总线,从存储器中读取或写入信息。
计算机在数据处理阶段的工作过程及原理是其最核心的运行机制,由CPU(中央处理器)负责执行。其主要任务包括算术运算、逻辑判断和数据转换,而控制器与运算器协同工作,确保整个系统的高效运转。控制器从存储器中取出指令,译码后交由运算器执行具体操作,同时依赖寄存器和高速缓存的配合,保证数据交换的速度与效率。具体步骤如下。
步骤01 系统从内存中取出第一条指令,并由控制器对指令进行译码,将其转换为明确的操作步骤。
步骤02 按指令要求,从存储器中提取必要的数据,随后交由运算器完成指定的运算或逻辑操作。
步骤03 操作结果按指令的地址要求存回内存。
步骤04 系统从内存中依次取出下一条指令,重复上述步骤,直至遇到停止指令。
这一按程序预设顺序自动执行指令的过程,是计算机的基本工作原理。这一原理由“计算机之父”冯·诺依曼提出,其核心思想可以概括为八个字:存储程序、程序控制。
将解题步骤编写为程序(由多条指令组成),并将程序与相关数据共同存储在计算机的存储器(通常是主存或内存)中。这种设计使计算机无须人为干预即可自动执行预设任务。
控制器逐条从存储器中读取指令,将其译码为具体操作,协调全机硬件完成任务。
每条指令的功能都独立定义,整个程序通过多条指令的组合实现复杂功能。
重复这一取指、译码、执行的循环操作,直到程序中所有指令执行完毕。
在整个过程中,寄存器和高速缓存扮演重要角色,用于临时存储操作数据和指令,显著提高数据交换速度和处理效率。冯·诺依曼原理为现代计算机的设计提供了理论依据,是计算机实现自动化、高效信息处理的关键。
指令
指令是计算机控制其组成部件进行各种具体操作的命令,有操作码和地址码两部分。本质上是一组二进制数。其中操作码规定了计算机下一步需要进行的动作,计算机会根据操作码产生相应的操作控制信息;地址码用于指出参与操作的数据或该数据的保存地址。此外,地址码还会在操作结束后,指出结果数据的保存地址,或者下一条指令的地址。
输出阶段是计算机向用户或外部系统反馈结果的过程。经过数据处理后,最终结果被发送到输出设备(如显示器、打印机或音箱)并以人类可读的形式呈现。输出阶段还可能包括将处理结果保存到存储设备中,供未来使用。
计算机的所有工作流程均在指令周期的控制下完成。每条指令从取指令、译码到执行,都在系统时钟的统一控制下严格按照时序运行。指令周期的高效性直接影响计算机的整体性能,而现代处理器通过流水线技术和并行计算显著提高了指令执行效率。
数制是计算机表示和处理信息的基础,决定了数据在计算机系统中的存储和运算方式。不同的数制有各自的特点和用途,其中二进制最为重要,这也是冯·诺依曼的贡献之一。他根据电子元件双稳工作的特点,建议在电子计算机中采用二进制。二进制的采用将大大简化机器的逻辑线路,稳定且易于实现。现在的计算机也是将二进制数制作为计算机存储和运算的基础。本节将详细介绍常见数制的概念及其相互转换方法,以帮助读者理解计算机的内部工作机制。
计算机中使用的主要数制包括二进制、十进制、八进制和十六进制。可以使用“数值 进制 ”的形式来表示,例如十六进制的A5B4可以表示为A5B4 16 。
二进制是计算机内部采用的基本数制,由0和1组成,用于表示所有数据。每个二进制位(bit)可以是0或1,表示计算机硬件的开关状态。所有的数值和字符在计算机中最终都将转换为二进制形式进行处理。二进制可以使用BIN或B表示。
十进制这是人类日常生活中最常使用的数制,由10个符号(0~9)组成。虽然计算机内部是以二进制处理数据,但我们通常通过十进制来表达和理解数据。十进制使用DEC或D表示。
八进制采用8个符号(0~7)表示数值,常用于计算机程序员在早期处理二进制时,作为一种简便的表达方式。八进制可以使用OCT或O来表示。
十六进制使用16个符号(0~9,A~F)表示数值。它便于表示长二进制数,每四个二进制数可以转换为一个十六进制数。十六进制可以使用HEX或H来表示。
十六进制中字母表示的数值
在十六进制中,各字母代表的十进制数为,A代表10、B代表11、C代表12、D代表13、E代表14、F代表15。
在计算机中,数码(digit)和权重(weight)是数制转换和数值表示中非常重要的概念。理解这两个概念,有助于我们更好地掌握数值如何在计算机中进行存储和运算。
数码是构成一个数值的基本元素,无论是二进制、八进制、十进制、十六进制还是其他进制,数码都起着表示和区分不同数值的作用。在十进制数制中,数码是0~9的数字。在二进制数制中,数码只有两个:0和1。在八进制数制中,数码是0~7的数字。在十六进制数制中,数码包括0~9和A~F,其中A表示10,B表示11,以此类推。
权重是数码在数值中的位置所赋予的“重要性”或“权值”,也可以理解为每个数码在数制中所代表的数值大小。每个数码的权重是由其所在的位数决定的,在不同的数制中,权重的计算方式会有所不同。
在十进制中,数码从右到左依次乘以10的幂。例如,数字543在十进制中,3的权重是10的0次方(10
0
即1)、4的权重是10的1次方(10
1
即10)、5的权重是10的2次方(10
2
即100),所以543=5×10
2
+4×10
1
+3×10
0
。
在二进制中,权重是2的幂。例如,二进制数1101,从右到左,其权重分别是2的0次方(2
0
即1)、2的1次方(2
1
即2)、2的2次方(2
2
即4)和2的3次方(2
3
即8),所以,1101(二进制)=1×2
3
+1×2
2
+0×2
1
+1×2
0
=13(十进制)。
在八进制中,权重是8的幂。例如,八进制数234,从右到左,其权重分别是8的0次方(8
0
即1)、8的1次方(8
1
即8)和8的2次方(8
2
即64),所以,234(八进制)=2×8
2
+3×8
1
+4×8
0
=156(十进制)。
在十六进制中,权重是16的幂。例如十六进制数A3F,其中A的权重是16的2次方(16
2
即256)、3的权重是16的1次方(16
1
即16)、F的权重是16的0次方(16
0
即1),所以A3F(十六进制)=A×16
2
+3×16
1
+F×16
0
=10×16
2
+3×16
1
+15×16
0
=2623(十进制)。
在计算机系统中,数制转换是一项基本操作,尤其是在用户输入数据时,计算机需要将其转换为二进制后进行处理。常见的数制转换有二进制与十进制之间的转换、二进制与十六进制之间的转换等。前面介绍权重时,已经介绍了二进制、八进制与十六进制转换为十进制的方法。下面介绍一些其他常见的转换方法。
十进制转二进制的基本方法是采用“除以2取余法”。具体步骤如下。
步骤01 将十进制数除以2,记录余数。
步骤02 将商继续除以2,直到商为0。
步骤03 余数从下往上排列,即为该十进制数对应的二进制数。
例如,十进制数13转换为二进制的过程:
13÷2=6余1,6÷2=3余0,3÷2=1余1,1÷2=0余1
所以,13的二进制表示为1101。
十进制小数的转换
十进制小数转换成二进制小数通常采用“乘2取整法”,首先用2去乘要转换的十进制小数,将乘积结果的整数部分提出来,然后继续用2去乘上次乘积的小数部分,直到所得积的小数部分为0或满足所需精度为止,最后把各次整数按最先得到的为最高位、最后得到的为最低位依次排列起来,便得到所求的二进制小数。
例如将0.3565转换为二进制,则0.3565×2=0.713(取0)、0.713×2=1.426(取1)、0.426×2=0.852(取0)、0.852×2=1.704(取1)、0.704×2=1.408(取1)……
以此类推,可以得到二进制小数0.3565的近似值是0.010112(保留5位小数)。如果继续计算,可以获得更高精度的近似值。
任何十进制整数都可以精确地转换成一个二进制整数,但十进制小数却不一定可以精确地转换成一个二进制小数。如果需要将一个十进制数(包含整数部分和小数部分)完全转换为二进制,可以先将整数部分和小数部分分别转换,然后将两部分拼接起来。
快速通过减法法则计算十进制数对应的二进制表示
二进制中的每一位都有一个对应的权重(也就是值的大小),从左到右依次是128,64,32,16,8,4,2,1。要将一个十进制数转换成二进制,可以通过减法快速计算。例如,假设要将78(十进制)转换成二进制。
步骤01 找到不超过78的最大权重值,也就是64,说明二进制中64所在的位置是1。然后78-64=14。
步骤02 找14中不超过它的最大权重值,显然是8,所以8的位置也是1。继续计算14-8=6。
步骤03 对6重复上述操作,发现不超过6的最大权重值是4,对应的位置为1,再算6-4=2。
步骤04 2对应的权重就是2,它的位置也是1,再算2-2=0。
到这里,我们已经完成了计算,得到了78的二进制表示就是01001110。在网络通信中的子网掩码计算等场景中,这种方法是比较常见的。
了解了十进制转换为二进制后,如果十进制转换为其他进制时,采用的都是类似的方法:十进制转换为八进制,采用“除八取余”,十进制小数转换为八进制,采用“乘八取整”;十进制转换为十六进制,采用“除十六取余”,十进制小数转换为八进制,采用“乘十六取整”。具体的过程和排序和二进制一致。注意,十六进制中10~15使用A~F表示。
二进制转换为八进制,如果仅是整数部分,将二进制从右开始向左每三位分成一组,不足三位在最高位补“0”凑成三位一组。每一组分别转换为八进制的一个数,然后组合起来即可。例如01000101(二进制),转换为八进制时,可以分组为001 000 101,然后每组单独转换(计算方法与二进制转十进制一致),再将得到的数组合起来,得到105(八进制)。
二进制转换为十六进制,如果仅是整数部分,将二进制从右开始向左每四位分成一组,不足四位在最高位补“0”凑成四位一组。每一组分别转换为十六进制的一个数,然后组合起来即可。例如1001001101(二进制),转换为十六进制时,可以分组为0010 0100 1101,然后每组单独转换(计算方法与二进制转十进制一致),再将得到的数组合起来,得到24D(十六进制),这里注意10~15表示为A~F。
八进制或十六进制转换为二进制,则与上面介绍的内容相反。八进制每位转换为3位二进制数,十六进制每位转换为4位二进制数。具体的计算方法同十进制数转换为二进制数相同,也就是“除2取余”法。例如八进制325转换为二进制,得到011 010 101,组合起来就是11010101。十六进制3AC转换为二进制,得到0011 1010 1100,组合起来就是1110101100。
八进制与十六进制的转换
可以通过二进制在中间进行过渡,然后进行二次转换。
数制在计算机的各领域都扮演着重要角色。
计算机硬件通过二进制进行数据存储和运算,内存、CPU、硬盘等设备的数据都以二进制存储,程序员在编程时通常使用十六进制或八进制来简化代码表示。
用户输入的数据往往是十进制,但计算机处理时需要转换为二进制进行计算。转换后的结果常常以十六进制形式输出,便于显示。
在计算机网络中,数据传输通常使用二进制进行编码传输,数据包的大小、网络协议的处理等都与数制转换密切相关。
冯·诺依曼体系结构的应用使得计算机可以通过简单的二进制信号来表示复杂的信息,使得计算机系统得以实现高效的自动化处理。
使用工具进行转换
除了使用以上方法进行转换外,还可以使用计算器中的“程序员”功能进行转换,如图2-12所示。或者使用一些网站进行二进制转换,如图2-13所示。
图2-12
图2-13
计算机中的编码是将人类语言和符号系统转换为计算机能够处理的二进制数据的过程,是信息在计算机中表示、存储和处理的基础。其中,字符编码是最重要的编码形式之一,它为计算机处理文字、数字和符号提供了统一的标准。
字符编码是将自然语言中的字符集(如字母、数字、标点符号)映射到计算机中的二进制形式的规则集合。计算机通过这些规则,可以在存储、处理和传输过程中对文本信息进行操作。字符编码为计算机与人类语言的沟通搭建了桥梁,是计算机处理文本信息的基础。
字符编码标准随着计算机技术的发展不断演进,不同的标准为不同的使用场景提供了解决方案。以下是几种常见的字符编码标准。
ASCII(American Standard Code for Information Interchange,美国标准信息交换码)是最早被广泛使用的字符编码标准。它采用7位二进制数表示字符,可以表示128个基本字符,包括英文字母、数字、标点符号和控制字符。ASCII编码简单高效,但仅适用于英语环境。
扩展ASCII在基础ASCII的基础上增加了一个高位,使用8位二进制表示256个字符。这种扩展允许添加更多特殊符号和语言字符,例如德语的变音字母或法语的重音字符,适合多语言支持的早期场景。
Unicode是全球通用的字符编码标准,旨在解决传统编码方案中字符集冲突的问题。Unicode覆盖了世界上几乎所有的语言文字,并通过不同的实现形式(如UTF-8、UTF-16)提供灵活的编码方式。Unicode的普及为跨语言信息交换和多语言软件开发提供了标准化的解决方案。
UTF-8是目前最广泛使用的Unicode实现,具有向后兼容ASCII的特点,能够高效编码英语文字,同时支持世界各地的语言。
UTF-16使用固定长度或可变长度表示字符,适合大字符集的处理需求。
除了ASCII和Unicode外,还有其他针对特定语言或地区的编码标准,如ISO-8859系列(支持多种欧洲语言)和EBCDIC(IBM制定的一种编码标准),但应用范围较小。
GB码是中文在计算机中使用的编码,中文字符的复杂性使得其编码方案有别于其他语言,主要包括以下几个标准。
GB2312是中国制定的第一个中文字符编码标准,支持6763个常用汉字和682个符号。每个字符使用2字节表示,主要用于早期的中文处理系统。
GBK(国标扩展)在GB2312的基础上扩展了字符集,支持约2万个汉字和符号,解决了早期GB2312中汉字数量不足的问题,广泛应用于20世纪90年代中文操作系统和软件。
GB18030是目前中国最新的字符编码标准,与Unicode完全兼容,支持全部中日韩字符和符号。GB18030对大字符集的支持使其成为中文信息处理的核心编码标准。
逻辑运算是计算机进行信息处理的核心功能之一,它通过对数据的逻辑操作完成复杂的计算和决策任务。计算机的逻辑运算是以二进制为基础,通过布尔代数的规则实现的。
逻辑运算是对二进制数据进行处理的过程,主要通过“与”“或”“非”等逻辑操作来实现对数据的分析、判断和选择。二进制数据只有两个取值(0或1),分别对应逻辑中的“假”和“真”。通过逻辑运算,计算机能够对复杂条件进行判断,并实现条件分支、循环控制等操作。
逻辑运算分为以下几种基本类型。
与运算的规则:只有当两个操作数都为1时,结果为1;否则,结果为0。与运算符号可以写作&、∩、∧、AND。
或运算的规则:只要有一个操作数为1,结果为1;只有当两个操作数都为0时,结果为0。或运算符可以写作|、OR、V、∪。
异或运算的规则:当两个操作数的值不同(一个为0,一个为1)时,结果为1;否则,结果为0。异或运算符可以写作XOR、⊕、^。
非运算的规则:将一个操作数的值取反,即0变为1,1变为0。非运算符可以写作“!”“┐”NOT。
上述逻辑运算示例如表2-1所示。
表2-1
与非运算(NAND)和或非运算(NOR)
这两种运算是与运算和或运算的取反结果,常用于构造逻辑电路。
与非(NAND):
只有当两个操作数都为1时,结果为0,否则为1。
或非(NOR):
只有当两个操作数都为0时,结果为1,否则为0。
在计算机中,所有的信息最终都以二进制数的形式表示和存储,数据单位是描述计算机存储容量、传输速度等的重要指标。
计算机以比特(Bit,b)作为最基本的数据单位,比特的取值只有0和1两种状态,通常用于表示二进制的最小信息量。多个比特可以组合成更大的单位,用于表示更复杂的信息,例如字母、数字、图像像素等。基本的数据单位包括以下几种。
比特是最小的二进制数据单位,表示一个二进制位(0或1)。
1字节通常由8比特组成,是计算机中处理数据的基本单位。例如,一个英文字母通常占1字节。
随着信息处理需求的增长,计算机中的数据单位逐步扩展,形成了以下常见的换算关系。
注意,这里的1024来源于计算机使用的二进制表示数据,因此以210(即1024)为计算基准,而非通常十进制中的1000。
计算机硬件(如硬盘、U盘、内存)使用数据单位来标示存储容量。例如,一块1TB的硬盘可以存储约1024B×1024B×1024B×1024B的数据。
1 TB硬盘在计算机中检测并没有1 TB容量
存储设备厂商(如硬盘、U盘等)通常采用十进制的单位换算(1000),而操作系统采用的是二进制的单位换算(1024)。两者的换算标准不同,导致了容量显示的差异。
网络传输单位的换算基于十进制,网络设备和通信协议通常以十进制标准为设计基础。网络传输单位的关系如下。
1Kb/s(千比特每秒)=1000b/s(比特每秒)
1Mb/s(兆比特每秒)=1000Kb/s(千比特每秒)
1Gb/s(千兆比特每秒)=1000Mb/s(兆比特每秒)
这种定义主要是为了简化网络带宽的计算。十进制的换算更接近人们日常使用的计量方式,也便于厂家宣传网络设备的传输速率。例如,1Gb/s通常表示每秒传输10亿比特。
1Gb/s(125MB/s)的网速,如果下载/s,理论数据大小为125MB(换算关系为1000),如果存储到计算机中,则大约为119MB(换算关系为1024)。