人们习惯了十进制计数。计算机的硬件基础是数字电路,它处理具有低电平和高电平两种稳定状态的电平信号,所以使用二进制。为了便于表达二进制数,人们又常用到十六进制数。
为便于存储及物理实现,计算机中采用二进制表达数值。二进制数的特点为:逢二进一,由0和1两个数码组成,基数为2,各个位权以2 k 表示。
a n a n -1 … a 1 a 0 . b 1 b 2 … b m = a n ×2 n + a n -1 ×2 n -1 +…+ a 1 ×2 1 + a 0 ×2 0 + b 1 ×2 -1 + b 2 ×2 -2 +…+ b m ×2 -m
其中 a i 、 b j 非0即1。
二进制数的算术运算与十进制类似,只不过是逢二进一、借一当二,表2-1展示了二进制运算规则。图2-1采用4位二进制数,举例说明了二进制的加减乘除运算,注意,加减法会出现进位或借位,乘积和被除数是双倍长的数据,除法有商和余数两个部分。
表2-1 二进制运算规则
图2-1 4位二进制数的算术运算
事件的假和真可以分别用数码0和1表示,这样事件之间的逻辑关系就可以利用二进制表达。同样,将数字电路的低电平用数码0表示、高电平用数码1表示,数字信号之间的逻辑关系(或者说数字电路的逻辑功能)也可以利用二进制描述。当然,此时的数码0和1并不代表数值,而只是代表两种状态。它们的运算不再是普通代数而是逻辑代数,也称为布尔代数(Boolean Algebra)。数学家布尔发明的逻辑代数起初并不为人熟知,后来成为数字电路的数学理论基础,从而获得广泛应用。数字电路也因此常被人们称为逻辑电路。
基本的逻辑运算(逻辑关系)有逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)和逻辑异或(XOR),分别使用符号 、 、~和⊕表示,表2-2为基本的逻辑运算规则。二进制数的逻辑运算就是按位(各位独立)逻辑运算的过程(详见3.3节的逻辑运算指令)。
表2-2 逻辑运算规则
例如,4位二进制数的逻辑运算如下。
● 逻辑与:1101 0011=0001。
● 逻辑或:1101 0011=1111。
● 逻辑非:~1101=0010。
● 逻辑异或:1101⊕0011=1110。
由于二进制数书写较长、难以辨认,因此常用易于与之转换的十六进制数来描述二进制数。十六进制数的基数是16,共有16个数码,即0、1、2、3、4、5、6、7、8、9和A、B、C、D、E、F(也可以使用小写字母a~f,依次表示十进制的10~15),逢十六进一,各个位的位权为16 k 。
a n a n -1 … a 1 a 0 . b 1 b 2 … b m = a n ×16 n + a n -1 ×16 n -1 +…+ a 1 ×16 1 + a 0 ×16 0 + b 1 ×16 -1 + b 2 ×16 -2 +…+ b m ×16 -m
其中 a i 、 b j 为0~F中的一个数码。
十六进制数的加减运算也与十进制类似,但注意逢十六进一,借一当十六。例如:
23D9H+94BEH=B897H,A59FH-62B8H=42E7H
这里的后缀字母H(或小写h)表示十六进制形式表达的数据。在涉及计算机学科知识的文献中,常使用十六进制数表达地址、数据、指令代码等,所以读者应该熟悉十六进制数的加减运算。
1)二进制数、十六进制数转换为十进制数需按权展开。例如:
0011.1010B =1×2 1 +1×2 0 +1×2 -1 +0×2 -2 +1×2 -3 =3.625
1.2H =1×16 0 +2×16 -1 =1.125
这里的后缀字母B(或小写b)表示二进制形式表达的数据。
2)十进制数的整数部分转换为二进制数和十六进制数可用除法,即把要转换的十进制数的整数部分不断除以二进制数和十六进制数的基数2或16,并记下余数,直到商为0为止,再由最后一个余数起逆向取各个余数,则为该十进制数整数部分转换成的二进制数或十六进制数。
图2-2演示了126转换为二进制数和十六进制数的过程,结果是:126=01111110B,126=7EH。
图2-2 十进制整数的转换
3)十进制数的小数部分转换为二进制数和十六进制数则可分别乘以各自的基数,记录整数部分,直到小数部分为0为止。
图2-3演示了0.8125转换为二进制数和十六进制数的过程,结果是:0.8125=0.1101B,0.8125=0.DH。
小数部分的转换可能会发生总是无法乘到为0的情况,这时可选取一定位数(精度),当然也势必产生无法避免的转换误差。
4)二进制数和十六进制数之间具有对应关系:以小数点为基准,整数从右向左(从低位到高位)、小数从左向右(从高位到低位)每4个二进制位对应1个十六进制位,如表2-3所示,所以二进制数和十六进制数之间的相互转换非常简单。表2-3还给出了BCD码以及常用的二进制位权值。例如:
图2-3 十进制小数的转换
00111010B=3AH,F2H=11110010B
表2-3 不同进制间(含BCD码)的对应关系