第2章
数制和编码
1
主要内容
计算机中的常用计数制、编码及其相互间的
转换;
二进制数的算术运算和逻辑运算;
符号数的表示及补码运算;
二进制数运算中的溢出问题;
基本逻辑门及译码器;
定点数与浮点数的表示方法。
2
§ 计算机中的数制
了解:各种计数制的特点及表示方法;
掌握:各种计数制之间的相互转换。
3
一、常用计数制
十进制——符合人们的习惯
二进制——便于物理实现
十六进制——便于识别、书写
4
十进制
特点:以十为底,逢十进一;
共有0-9十个数字符号。
表示:权表达式
n:整数位数
m:小数位数
5
二进制
特点:以2为底,逢2进位;
只有0和1两个符号。(数后面加B)
表示:
n:整数位数
m:小数位数
6
十六进制
特点:有0--9及A--F共16个数字符号,
逢16进位。(数后面加H)
表示:
n:整数位数
m:小数位数
7
任意K进制数的表示
一般地,对任意一个K进制数S都可表示为
其中:
Si -- S的第i位数码,可以是K个符号中任何一个;
n,m – 整数和小数的位数;
K -- 基数;
Ki -- K进制数的权
8
例
或 ()10
或 ()2
ABCD . BFH 或 (ABCD . BF)16
9
二、各数制间的转换
非十进制数 → 十进制数:
按相应的权表达式展开,再按十进制求和。
例:=2×161+4×160+A×16-1
=
注:A~F分别用10~15代入
10
十进制 → 非十进制数
十进制 → 二进制:
整数:除2取余;
小数:乘2取整。
十进制 → 十六进制:
整数:除16取余;
小数:乘16取整。
以小数点为起点求得整数和小数的每一位。
注:十进制转换成任意K进制数与上类似,整:除K取余,小数:乘K取整。
11
十进制到十六进制转换例
= ( ? )H
400/16=25 -----------余数=0(个位)
25/16=1 --------------余数=9(十位)
1/16=0 ---------------余数=1(百位)
×16= -----------整数=4(1/10)
即: =
12
二进制与十六进制间的转换
用4位二进制数表示1位十六进制数
0000 ------------- 0H
┇ ┇
1001 ------------- 9H
1010 ------------- AH
1011 ------------- BH
1100 ------------- CH
1101 ------------- DH
1110 ------------- EH
1111 ------------- FH 13
二进制与十六进制间的转换
例: = (?)H
0101 1000
5 8 9 . C
注意:位数不够时要补0
14
§ 无符号二进制数的运算
二进制数
算术运算
逻辑运算
无符号数
有符号数: 算术运算
15
一、无符号数的算术运算
加法运算
减法运算
乘法运算
除法运算
16
注意点:
对加法:1+1=0(有进位)
对减法:0-1=1(有借位)
对乘法:仅有1×1=1,其余皆为0;
乘以2相当于左移一位。
对除法: 除以2则相当于右移1位。
17
例
00001011×0100=00101100B
00001011÷0100=00000010B
即:商=00000010B
余数=11B
18
二、无符号数的表示范围
◇一个n位的无符号二进制数X,其表示
范围为:
0 ≤ X ≤ 2n-1
若运算结果超出这个范围,则产生溢出。
◇溢出的判别方法:
运算时,当最高位向更高位有进位(或借位)
时则产生溢出。
19
例:
最高位向前有进位,产生溢出。
本例中:运算结果为256,超出8位二进制数所
能表示的范围255。
20
三、逻辑运算
与(∧)
或(∨)
非(▔)
异或(⊕)
掌握:逻辑关系(真值表)和逻辑门。
特点:按位运算,无进位/借位。
21
“与”、“或”运算
任何数和“0”相“与”,结果为0
任何数和“1”相“或”,结果为1
B
A
C
A
B
C& ≥1
A∧B=C A∨B=C
22
“非”、“异或”运算
“非”运算即按位求反
两个二进制数相“异或”:
相同则为0,相异则为1
A
A
B
C
1 ⊕
B=A A B=C
B
23
“与非”、“或非”运算
A∧B=C A∨B=C
B
A
C A
B
C& ≥1
24
四、译码器
74LS138译码器:
G1
G2A
G2B
C
B
A
Y0
Y7
•
•
•
•
3-8译码器原理
译码使能端
译码输入端
译码输出端
25
3-8%E8%AF%91%E7%A0%81%E5%8E%9F%E7%90%
74LS138真值表
26
§ 符号数的表示及运算
计算机中的符号数的表示方法:
把二进制数的最高位定义为符号位。
符号位:“0” 表示正,
“1” 表示负。
把符号也数值化了的数,称为机器数。
机器数所表示的真实的数值,称为真值。
注:后面的讲述均以8位二进制数为例。
27
例
+52 = +0110100 = 0 0110100
符号位 数值位
-52 = -0110100 = 1 0110100
真值 机器数
28
一、符号数的表示:
对于符号数,机器数常用的表示方法有
原码、反码和补码三种。数X的原码记作
[X]原,反码记作[X]反,补码记作[X]补。
注意:对正数,三种表示法均相同。
它们的差别在于对负数的表示。
29
原码[X]原
最高位为符号位,用“0”表示正,用“1”表示负;
数值部分照原样写出即可。
优点: 真值和其原码表示之间的对应关
系简单,容易理解;
缺点: 计算机中用原码进行加减运算比
较困难,0的表示不唯一。
正式定义为:
30
数0的原码
+0=0 0000000
-0=1 0000000
即:数0的原码不唯一。
31
原码的例子
真值: X= +18 = +0010010
X= -18 = -0010010
原码: [X]原 = 0 0010010
[X]原 = 1 0010010
符号 符号位
n位原码表示数值的范围是:
对应的原码是1111 ~ 0111
32
反码[X]反
对一个数X:
若X>0 ,则 [X]反=[X]原
若X<0, 则 [X]反= 对应原码的符号位
不变,数值部分按位求反。
正式定义为:
33
反码例
X= -52 = -0110100
[X]原=1 0110100
[X]反=1 1001011
34
0的反码
[+0]反=00000000
[-0]反 =11111111
即:数0的反码也不是唯一的。
n位反码表示数值的范围是
对应的反码是1000 ~ 0111
35
补
补码[X]补
定义:
若X>0, 则[X]补= [X]反= [X]原
若X<0, 则[X]补= [X]反+1
正式定义为:
36
例
X= –52= – 0110100
[X]原=10110100
[X]反=11001011
[X]补= [X]反+1=11001100
37
0的补码
[+0]补= [+0]原=00000000
[-0]补 = [-0]反+1=11111111+1
=1 00000000
n位补码表示数值的范围是
对应的补码是1000 ~ 0111
对8位字长,进位被舍掉
38
特殊数10000000
该数在原码中定义为:-0
在反码中定义为: -127
在补码中定义为: -128
对无符号数,(10000000)B=128
39
8/16位符号数的表示范围
对8位二进制数:
原码: -127 ~ +127
反码: -127 ~ +127
补码: -128 ~ +127
对16位二进制数:
原码: -32767 ~ +32767
反码: -32767 ~ +32767
补码: -32768 ~ +32767
40
符号二进制数与十进制的转换
对用补码表示的二进制数:
1)求出真值
2)进行转换
41
例
将一个用补码表示的二进制数转换为十进制数。
[X]补=0 0101110B 真值为:0101110B
正数
所以:X=+46
[X]补=1 1010010B 真值不等于:-1010010B
负数
而是:X= [[X]补]补= [11010010]补
= - 0101110 = - 46
42
二、符号数的算术运算
通过引进补码,可将减法运算转换为加法运算。
即:[X+Y]补= [X]补+[Y]补
[X-Y]补= [X+(-Y)]补 = [X]补+[-Y]补
其中X,Y为正负数均可,符号位参与运算。
43
补码的运算是基于模的运算
模(module)就是一个计数系统的最大容量。例如钟表
的模为12,8位二进制数的模为28,等等。
凡是用器件进行的运算都是有模运算,运算结果超过模
的部分会被运算器自动丢弃。因此,当器件为n位时,有
X=2n+X (mod 2n)
根据定义,
[X]补=2n+X (mod 2n)
因此可得,
[XY]补= 2n + 2n + (XY) (mod 2n)
= (2n+X) + (2n Y) (mod 2n)
= [X]补+ [Y]补
44
例
X=-0110100,Y=+1110100,求X+Y=?
[X]原=10110100
[X]补= [X]反+1=11001100
[Y]补= [Y]原=01110100
所以: [X+Y]补= [X]补+ [Y]补
=11001100+01110100
=01000000
X+Y=+1000000
45
符号数运算中的溢出问题
两个8位带符号二进制数相加或相减时,
若
C7C6=1
则结果产生溢出。
其中:C7为最高位的进(借)位;
C6为次高位的进(借)位。
对16位或32位的运算,也有类似结论。
46
观察以下四种情况哪个溢出?
1 0 1 1 0 1 0 1
+ 1 0 0 0 1 1 1 1
1 0 1 0 0 0 1 0 0
0 1 0 0 0 0 1 0
+ 0 1 1 0 0 0 1 1
1 0 1 0 0 1 0 1
0 1 0 0 0 0 1 0
+ 1 1 0 0 1 1 0 1
1 0 0 0 0 1 1 1 1
CASE1: CASE2:
CASE3:
假定以下运算都是有符号数的运算。
0 0 1 0 0 0 1 0
+ 1 1 0 0 1 1 0 1
1 1 1 0 1 1 1 1
CASE4:
47
例:
若:X=01111000, Y=01101001
则:X+Y=
即:次高位向最高位有进位,而最高位向前无
进位,产生溢出。
(事实上,两正数相加得出负数,结果出错)
48
§ 定点数与浮点数
定点数:小数点位置固定不变的数。
小数点的位置:
纯小数
纯整数
符号 X1 X2 Xn…
小数点位置
符号 X1 X2 Xn…
小数点位置
49
浮点数
浮点数来源于科学记数法
例如:+=+×103
=×10-2
浮点数:用阶码和尾数表示的数,尾数通常为纯小数。
2E×F
数符 阶E阶符 尾数F
小数点位置
阶码
50
80x86中使用的IEEE标准浮点数
单精度浮点数(阶码偏移7FH)
双精度浮点数(阶码偏移3FFH)
数符 阶E(11位) 尾数F(52位) ,整数部分默认为1
小数点位置
数符 阶E(8位) 尾数F(23位),整数部分默认为1
小数点位置
31 30 23 22 0
63 62 52 51 0
51
例:
将用8位阶码、15位尾数的规格
化浮点数形式表示。
解:因为=×24
所以要求的浮点数为:
0 0000100 101 1101 0100 00000
阶码阶符数符 尾数(后补0到15位)
用IEEE标准单精度浮点数重做上题。
因为=×23, 阶为7FH+3=82H=10000010B
所以要求的浮点数为:
0 10000010 011 1010 1000 0000 0000 0000
52
§ 计算机中的编码
用于表示非数值型数据。常用的二种:
BCD码
用二进制编码的十进制数
ASCII码
美国标准信息交换代码
53
BCD码
压缩BCD码
用4位二进制码表示一位十进制数,
一个字节可放2位十进制数。
非压缩BCD码
用8位二进制码表示一位十进制数,
高4位总为0。
54
BCD码与二进制数之间的转换
先转换为十进制数,再转换二进制数;反
之同样。
例: (0001 0001 .0010 0101)BCD
= 11 .25
= 1011 .01B
55
ASCII码
字符的编码,一般用7位二进制码表示。
见教材附录A
用8位二进制数表示时,最高位总为0,因
此最高位(D7位)可作为奇偶校验位。
熟悉16进制数0-F的ASCII码:
30H-39H,41H-46H
56
ASCII码的校验
奇校验
加上校验位后编码中“1”的个数为奇数。
例:A的ASCII码是41H(1000001B),
以奇校验传送则为C1H(11000001B)
偶校验
加上校验位后编码中“1”的个数为偶数。
上例若以偶校验传送,则为41H。
57
结束语
掌握:
三种常用计数制及编码的表示及其相互间
的转换;
无符号二进制数的算术运算和逻辑运算;
符号数的表示及补码的运算;
基本逻辑门和译码器;
定点数及浮点数的表示方法。
58
作业:
的(1),(3)小题
设X=+100101,Y=-0110110
求X+2Y=?
59