1.1.2 计算机中的数制
计算机的工作过程就是对数据的处理。计算机是一个典型的数字化设备,它只能识别0和1,所有的计算机都是以二进制数的形式进行算术运算和逻辑操作的。
1.计算机中的数制
在使用微型计算机时常用的进位计数制有二进制、十六进制、十进制三种。
十进制数、二进制数及十六进制数之间的关系如表1-3所示。
表1-3 十进制数、二进制数及十六进制数对照表
为了区别十进制、二进制及十六进制三种数制,可以在数的后面加一字母。规定B (Binary)表示二进制数,D(Decimal)表示十进制数,H(Hexadecimal)表示十六进制数,其中十进制数后面的字母D可以省略。
2.带符号数的表示
一个数据是带符号的数还是不带符号的数,事先是已知的。在微型计算机中所有带符号的数都是用补码表示的,采用补码的目的在于,可用加法运算代替减法运算,从而简化硬件结构,降低成本。补码运算时符号位不需要单独处理,符号位与数值部分一起参加运算,在不发生溢出的情况下,运算结果(包括符号位)是正确的。
8位二进制数用来表示无符号数、有符号数(原码、反码和补码),如表1-4所示。
表1-4 原码、反码和补码表
从表1-4可以看出,8位二进制数、无符号数表示范围是0~255,有符号数原码表示范围是-127~+127,反码表示范围是-127~+127,补码表示范围是-128~+127。
3.带符号数溢出及其判断方法
(1)什么是溢出
在微型计算机中,所有带符号的数都是用补码表示的。所谓溢出,是指带符号数的补码加、减运算的结果超出了补码表示的范围。若发生了溢出,则带符号数的运算结果必然是错误的。
(2)判断溢出的方法
溢出只能出现在两个同符号数相加或两个异符号数相减的情况下。利用双进位方法判断有无溢出是一种常用的方法,它的规则如下。
在两个同符号数相加或两个异符号数相减时,如果次高位向最高位有进位(或借位),而最高位向前无进位(或借位),则结果发生溢出;反过来,如果次高位向最高位无进位(或借位),而最高位向前有进位(或借位),则结果也发生溢出。
这种方法是利用最高位和次高位的进位/借位状态进行“异或”来判断的。对8位二进制数来说,如果溢出记为OF,最高位和次高位的进位/借位状态分别记为C7和C6,则OF=C7⊕C6,OF=1表示有溢出,OF=0表示无溢出。
在微型计算机中,可用多字节表示更大的数,避免产生溢出错误。