💗计算机基础系列文章💗
- 👉🍀计算机基础(1)——计算机的发展史🍀
- 👉🍀计算机基础(2)——冯诺依曼体系结构🍀
- 👉🍀计算机基础(3)——计算机的系统组成🍀
- 👉🍀计算机基础(4)——操作系统概述🍀
- 👉🍀计算机基础(5)——进制与进制转换🍀
- 👉🍀计算机基础(6)——编码与解码🍀
- 👉🍀计算机基础(7)——数字图像技术🍀
- 👉🍀计算机基础(8)——音频数字化(模电与数电)🍀
- 👉🍀计算机基础(9)——原码、补码、反码🍀
- 👉🍀计算机基础(10)——编程语言与跨平台🍀
我们都知道计算机底层采用的是二进制码,即计算机底层存储的全都是0和1,不管是我们看到的视频、图片、音乐、文档和其他任何存储在电脑上的文件,其底层都是0,1,那么为什么要采用0和1来进行存储呢?这些0和1在计算机底层又是如何存储的呢?0和1又是如何变成我们需要的文件呢?
CPU的计算
我们知道计算机底层都是靠CPU来进行运算的,CPU的发展经历了如下几个过程,如图所示:
也就是说CPU最原先是通过二极管发展而来,我们可以把这些二极管看做是一个一个的开关,这些开关只有两个状态:通(1)、断(0),那么1个二极管能够表示几种状态呢?很明显就两种,0和1。
2个二极管可表示4个状态:
00,01,10,11
3个二极管可表示8个状态:
000,001,010,011,100,101,110,111
4个二极管就可表示16个状态,5个表示32个状态,6表示64个状态…一个CPU拥有的晶体管越多,电流在一个时间单位上流动的分支越多,从宏观上讲,可以在CPU上处理的数据越多,机器就越快。目前CPU都集成了超大规模的集成电路,多大呢?早在2012年Intel发布的Core i7处理器的芯片集成度达到了14亿个晶体管,数据计算能力可想而知。
就简单而言,这些晶体管就是微型的电子开关,它们是构建CPU的基石。当计算机从内存中读取到指令后(0、1),将其转换为电信号,1则表示高电频,0则表示低电频,通过一些与门,或门,与或门等逻辑控制电路。而计算机内部有超大规模的集成电路,也就可以接受非常庞大规模的数据进行计算,把处理好的数据通过同样的方式将这些信号进行转换写进内存、然后再写出磁盘、麦克风、显示器等外部设备。
Tips:计算机相关的硬件设备(以及各项电子设备)的工作原理涉及到电路、模拟信号、数字信号、计算机组成原理等诸多计算机/电子信息等专业课程,不在本书研究范围内,大家有兴趣可以自行查看相关书籍的内容来了解这部分知识。到目前为止,我们只需要大致了解到CPU内部是一块超大规模的集成电路板(虽然远不止这么简单),并且能进行计算即可。
那么计算机中存储的二进制是如何转变为我们看到的内容呢?
这中间就存在一个编码与解码的过程,其实我们在计算机中打开任何的一个文件、应用程序、游戏等其实都可以看做是一个解码的过程,只不过对应的解析器不同罢了。
1.4.2 文本的编码与解码
以最普通的文本为例,我们跟计算机双方约定好当在键盘上输入一个字母A时,保存到电脑上的内容就为0100 0001,当我们在电脑上输入一个字母B时,电脑底层存储的就是0100 0010,越来越多的信息需要通过编码存储到计算机内,因此编码表这个概念就出来了,世界上的一些权威组织就开始着手于编码的制作,有了编码表我们就能够使用0和1来代表世间上的万物了。编码表就相当于一个翻译官,充当人类与计算机之间的一个翻译官。
当我们打开计算机中的记事本输入内容后保存到文件时,过程如图所示:
当我们打开计算机中的记事本查看文件中的内容时,过程如图所示:
市面上有非常多的编码表,每个表码表的编码内容以及规则是不一样的,因此我们存储到计算机时采用的编码表应该与我们取出数据解码时的编码表一致。
目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。
- 标准ASCII码:标准ASCII码也叫基础ASCII码,使用7位二进制数来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符等。7位可以表示128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127,所以在7位二进制码种,最多可以表示128个字符。
- 扩展ASCII码:扩展ASCII 字符是从128到255(0x80-0xff)的字符。许多基于x86的系统都支持使用扩展ASCII。它将每个字符的第8位用于确定附加的128个特殊符号字符、外来语字母和图形符号。针对扩展的ASCII码,不同的国家有不同的字符集,所以它并不是国际标准。
ASCII第一次以规范标准的型态发表是在1967年,最后一次更新则是在1986年,至今为止共定义了128个字符(标准ASCII码),当初的设计并没有考虑欧洲那些扩展的拉丁字母,也没有考虑韩语和日语和中文汉字等。因此各个国家开始着手制定自己的字符编码,例如 ISO/IEC 8859(欧洲字符集)、shift_Jis(日语字符集)、GBK(中文字符集)等。
一般的外国人用的数字和字母有限,根据ASCII表来编码,1个字节可以表示完全。我们中国人大部分用的是汉字,所以引入了GB2312编码表,国标(6000多个汉字),一个汉字用2个字节表示。随后又扩展了GBK,扩展编码,能够达到几万个汉字。例如在ASCII编码表中,“65(十进制)”代表字母“A”,在GBK编码表中“CED2(十六进制)”代表中文汉字“我”。
下表是标准ASCII编码表中规范的部分字符内容:
二进制 | 十进制 | 字符 |
---|---|---|
0100 0001 | 65 | A |
0100 0010 | 66 | B |
0100 0011 | 67 | C |
0100 0100 | 68 | D |
0100 0101 | 69 | E |
0100 0110 | 70 | F |
0100 0111 | 71 | G |
下表是GBK编码表中规范的部分字符内容:
二进制 | 十六进制 | 字符 |
---|---|---|
10110100 11110011 | B4F3 | 大 |
10111100 11010010 | BCD2 | 家 |
10111010 11000011 | BAC3 | 好 |