两个无符号数相加(或相减),如最高位有进位(或错位),则产生溢出。这在计算机运算中很容易以C标志来进行判断(以后展开讲)。
1.3.3 二进制数的逻辑运算
逻辑运算包括“与”、“或”、“非”及“异或”四种运算,与算术运算不同的是它对二进制数按位进行操作,因之不存在进位(或借位)问题。 1.“与”运算
“与”运算的规则为“见0为0,见1不变”。例见P.12例1-14。
2.“或”运算
“或”运算的规则为“见0不变,见1为1,”。例见P.12例1-15。
3.“非”运算
“非”运算的规则为按位取反。例见P.12例1-16。
4.“异或”运算
“异或”运算的规则为“同则为0,异则为1”。 例见P.12例1-17。
1.3.4 基本逻辑门及常用逻辑部件(略)
1.4 带符号二进制数的表示及运算
计算机只能识别“0”和“1”这两个代码,因之,在计算机中,数的正负号也只能由“0”和“1”来表示。通常规定,一个有符号数的最高位代表符号,该位为0代表正,该位为1代表负。
习惯上把符号数值化了的数,称为机器数,而把其原来的数值称为真值。
1.4.1 带符号数的表示方法
在计算机中,带符号的数有三种表示方法,即原码、补码和反码。不管是哪一种表示方法,其最高位均为符号位,用“0”表示正数,用“1”表示负数。下面以8位二进制数位例加以说明。
1.原码
一个带符号数的原码记作[X]原。在原码表示法中,数值部分为该数的绝对值,以符号位表示该数的正负。
例见P.16例1-19。
需要指出的是在原码表示法中,0的原码有两种不同的表示形式,即+0和-0。 [+0]原 = 00000000
[-0]原 = 10000000
原码表示法的优点是简单,易于理解。它的缺点是不便于运算(举例说明)。
2.反码
一个带符号数的反码记作[X]反。在反码表示法中,对于正数,数值部分即为该数的原
6
值;而对于负数,其数值部分为该数的绝对值各位取反。同样,以符号位表示该数的正负。
例见P.17例1-20。
在反码表示法中,0的反码也有两种表示形式: [+0]反 = 00000000 [-0]反 = 11111111
由上可知,由于在原码和反码表示法中,数值0的表示法不是唯一的,必然对运算带来不利(缺乏唯一性)。为此,引入补码的概念。
3.补码
一个带符号数的补码记作[X]补。在补码表示法中,对于正数,其数值部分仍为该数的原值;对于负数,其数值部分为该数的绝对值各位取反再加1。也仍以符号位表示该数的正负。(即[X]补 = [X]反+1)。
例见P.18例1-21。
特别需要指出的是,与原码和反码不同,在补码表示法中,0的表示法是唯一的。 [+0]补 = [+0]原 = [+0]反 = 00000000
[-0]补 = [-0]反+1 = 11111111+1 = 00000000
∴[+0]补 = [-0]补 = 00000000
另需指出的是,对于机器数,10000000在补码表示法中定义为-128(同样,对于16位的机器数1000000000000000,在补码表示法中定义为-32768)。
1.4.2 真值与补码之间的转换
要把一个用补码表示的二进制数转换为带符号的二进制数,可分两种情况来处理。
如该数为正数,则除符号位外,其余7位即是此数的二进制数值,转换很为简单。 例:已知[X]补 = 00101110,求X的真值。 解:X = 00101110 = +46
如该数为负数,则可将该数补码数值部分再求一次补,即可得到该数绝对值。 例:已知[X]补 = 11010010,求X的真值。
X=11010010+1 = 00101110
∴X = -46
为什么要引进补码的概念呢?这是因为引进补码后,在计算机运算时,可将减法运算演变为加法运算。
例:求Y = 99-58 = 99+(-58)= 41
[99]补 = 01100011
[-58]补 = 11000110 00111010(58的二进制代码)
求反:11000101
求补:11000110
01100011 +11000110 1 00101001 即为[41]
由于计算机中求反很易实现,故上述运算过程在计算机上较简单。而众所周知,对于二进制数的算术运算,乘法运算可转换为左移和加法运算,而除法运算可转换为右移和减法运算。由此得到,在计算机中,加、减、乘、除,均可由加法和移位两种操作得以实现,这就是引入补码的最终目的!
7
1.4.3 补码的运算
补码运算具有如下规律: 1)[X+Y]补 = [X]补+[Y]补 2)[X-Y]补 = [X]补-[Y]补
3)[X-Y]补 = [X]补+[-Y]补
这里[-Y]补称为对补码数[Y]补的变补。变补规则为对[Y]补的各位(包括字符位)按位..取反加1,结果即为[-Y]补(当然也可直接对-Y求补码,结果相同)。
例见P.19例1-24及例1-25。
需要强调的是上述三个公式的成立是有条件的。其条件是:式中X、Y、-Y、X+Y及X-Y都必须在补码的表示范围内,倘若超出补码的表示范围,等式便不再成立,详见下节。
1.4.4 带符号数运算时的溢出问题
1.带符号数的表示范围
(1)8位二进制数,原码、反码和补码的表示范围
△原码 11111111~01111111(-127~+127) △反码 10000000~01111111(-127~+127) △补码 10000000~01111111(-128~+127)(数的状态和数的个数对应) 当运算结果超出上述范围时就会产生溢出。 (2)16位二进制数,原码、反码和补码的表示范围 △原码 FFFFH~7FFFH(-32767~+32767) △反码 8000H~7FFFH(-32767~+32767) △补码 8000H~7FFFH(-32768~+32767) 同样,当运算结果超出上述范围时就会产生溢出。
2.带符号数运算时的溢出判断
带符号数运算时的溢出判断的规则是:
在运算中,当最高位和次高位同有进位或同无进位,则无溢出。如两者一个有进位,一个无进位,则有溢出。
例见P.21例1-26、例1-27及P22例1-28、1-29。
1.5 二进制编码
计算机除处理数值领域的问题外,还被大量用于处理非数值领域的问题,这要求计算机能识别文字、字符和各种符号(例见P.22)。而所有字符符号及十进制数都必须转换为二进制代码才能为计算机所识别。
1.二进制编码的十进制数(BCD码数)
用二进制编码来表示十进制简称BCD码(Binary Coded Decimal)。BCD码的编码方式有多种,最常用的是8421码。
(1)8421码
BCD码与二进制码的对应关系如P.23表1-9所示。其特点为: ①用4位二进制数表示1位十进制数。 ②BCD码是十进制数,逢10进1。
8
(2)BCD码与十进制数、二进制数的转换。
十进制数用BCD码表示十分简单,只要对十进制数每位按表1-9进行转换即可。 例见P.23例1-30。
显而易见,如要将BCD码转换为其对应的十进制数也十分简单,只要将每4位二进制代码变成其对应的十进制数即可。
BCD码与二进制数之间的变化要稍麻烦些,一般要以十进制数为桥梁进行转换。 例见P23例1-31及例1-32。
为避免与二进制数混淆,BCD码书写时通常将每位BCD码(4位二进制码)写成一组,中间留一空格,且加下标BCD。
(3)计算机中BCD码的存储方式
在存储单元为8位的情况下,BCD码有两种表示方法。一种是压缩BCD码表示方法,例10010010表示十进制数92(即一个字节表示2个十进制数),另一种表示方法为非压缩BCD码(也称扩展BCD码),同样是十进制数92,用非压缩BCD码就表示为:0000100100000010。
2.字符的编码
为能让计算机识别,各种字符也必须用特定的二进制代码编写,目前在计算机中普遍采用的是ASCII码(American Standard Code for Information Interchange美国标准信息交换码)。
ASCII字符编码表见附录A,它是用7位二进制代码来表示128个字符和符号。 一般规定一个ASCII码存放在字节的低7位,字节的最高位在通信中常用作奇偶校验位(简单说明什么是奇偶校验)。
1.6 常用术语解释
1.6.1 数据单位
1.位(bit)、兆位(Mb)、千兆位(Gb)和兆兆位(Tb)
位是计算机处理的最小数据单位,它只有“0”、“1”两种状态。Bit通常缩写为b。
20
Mb(Megabit)代表1024×1024位,也即2位。 Gb(Gigabit)代表1024Mb,也即230位。 Tb(Terabit)代表1024Gb,也即2位。
2.字节(byte)、KB、MB、GB和TB 1个字节包含8个二进制位,Byte通常缩写为B。字节是计算机中存储容量的基本单位。 在计算机中,1K为1024,即210,所以1KB = 1024Byte。以此类推,1MB = 1024KB,1GB = 1024MB,1TB = 1024GB。
3.字(word)
字在不同场合有不同意义。它是数据总线的宽度。一个字代表两个字节,在8086系列 的机型中为16位。
40
1.6.2 计算机通信速率单位(略,待到有关章节再讲)
1.6.3 兼容性
9
Δ系统兼容:若在一个系统上开发的硬件和软件能在另一个系统上成功运行,则称两个系统兼容。
Δ向上兼容:若兼容性是旧系统到新系统的单向发展,则称为向上兼容(举例说明)。
10