认识二进制能更快的理解计算机中的数据是怎么表现的。
本节必须掌握的知识点:
1、 二进制、十六进制相互之间的转换
2、 理解计算机中的数据形式
理解进制的概念是为我们学习二进制做准备的。在本章第一节中我们提到,计算机使用二进制,那么它为什么要使用二进制呢?
计算机只有在有电的情况下才能工作,这是由于计算机本身是由电路组成的。而电路只有两种状态:1、通电 2、断电。
通过前面进制概念的学习,我们知道任何符号都可以描述进制,需要几个符号,我们就把它描述为几进制。这里有“开”、“关”两个符号,所以它用二进制来描述。“开”和“关”不便于书写计算,于是就用数字“1”表示“开”,数字“0”表示“关”。
每一条电路可以表示一位“0”或者“1”,那么多条电路就有许多的“0”和“1”,进而能表示多个数据。就像汉字,每一个汉字都是由一些基本的笔画组成,而不同数量、不同笔画组成了成千上万个汉字。
为什么电路状态只有“开”和“关”两种状态呢?主要因为它受计算机硬件方面的制约,它只有“通电”和“断电”两种状态。“通电”和“断电”也可以把它转换为逻辑关系“真”和“假”,“通电”表示“真”,“断电”表示“假”。
随着硬件的发展,目前已诞生出“量子计算机”,它的状态除了“0”和“1”两种状态,即“真”和“假”的状态,它还有另外一种状态,即“非真非假”,所以量子计算机的运算能力比我们普通的计算机的运算能力要大很多。目前电子计算机的性能满足我们大众的需求,它的造价也比量子计算机低很多,所以在很长一段时间内,不用担心被量子计算机淘汰。
由于计算机只认识0和1,这就意味着在计算机中存储任何文件,以及接受任何指令只能由0和1组成,无论是一段音乐还是一个电影、还是软件。我们打开一个可执行程序(.exe),看一看它的内部是不是全是二进制数。
双击一个程序,我们只能看到它运行的状态,并不能看到它的内部情况。这里我们需要一个文本编辑软件:UltraEdit,简称UE,通过它能看到程序的内部情况。在后面的学习中,我们会经常用到,大家可到UltraEdit软件官网下载,也可到我们的网站下载已安装这些软件的虚拟机学习环境(网址 http://www.bcdaren.com/)。
这个软件操作很简单,打开UE,只要将需要查看的软件(或其他文件)拖进UE窗口,图1-3-1我们用UE打开一个网页的情况:
图1-3-1
中间红色框内就是这个程序的内部数据。红色框左边为“文件偏移地址区域”,右边为“ASCII码区域”,在后面我们会详细介绍。
这里有一个小问题,计算机只认识0和1,为什么这里面的数字不是0和1呢?上面的数字是十六进制,它其实是二进制的简写形式。
我们用二进制写0--1111,分别是
0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111
四位二进制数最多能表示上面的16个数,如果有1000、10000个数,书写起来很不方便,也不便于识别。于是我们将上面的二进制数,前面不足四位的添“0”,转化为十六进制数,如下表所示:
每1位十六进制表示4位二进制,这样大大简化二进制的书写。图1-3-1中所有的十六进制都能轻松地转换为二进制,如“2E”转换为二进制为“0010 1110”、“B8”转换为二进制为“1011 1000”。
在我们使用的时候依旧要把它看作为二进制数,这就要求我们熟练掌握十六进制和二进制之间的转换。为什么我们仍需要将它看成是二进制数呢?在CPU中,某一条电路的变化甚至会影响整个程序的执行,而一条电路就是二进制中的1位,我们用调试工具DTDebug打开一个软件,如图1-3-2所示:
图1-3-2
图中EFL寄存器中存储的数字为00000246(注意图中箭头位置)这是8位十六进制数,转换为二进制数为:0000 0000 0000 0000 0000 0010 0100 0110,一共32位。程序执行的过程中,它们是不断变化的,有一些位的改变会影响程序的执行。在我们学习操作系统内核的时候,需要知道不同位所代表的不同的含义。
目前我们只需要熟练地在十六进制与二进制之间进行转换。理解计算机中的数据形式。
下一节介绍数据宽度。
练习:
1、熟练掌握二进制与十六进制之间的转换。
2、 将下面十六进制数转成二进制:
64 E9 54 F6 15 DE CD BA 18 23 47 34 A9 57 B6 19 CE FD BA 82 93 27
3、 将下面二进制数转成十六进制 :
1101 1001 0011 0010 1100 1111 1010 1000 0011 0010 1100 1001 1001 0011 0111