1
第 2章
数制和编码
2
主要内容
? 计算机中的常用计数制、编码及其相互间的
转换;
? 二进制数的算术运算和逻辑运算;
? 符号数的表示及补码运算;
? 二进制数运算中的溢出问题;
? 基本逻辑门及译码器;
? 定点数与浮点数的表示方法。
3
§ 2.1 计算机中的 数制
? 了解:各种计数制的特点及表示方法;
? 掌握:各种计数制之间的相互转换。
4
一、常用计数制
? 十进制 ——符合人们的习惯
? 二进制 ——便于物理实现
? 十六进制 ——便于识别、书写
5
十进制
? 特点:以十为底,逢十进一;
共 有 0-9十个数字符号 。
? 表示,权表达式
n:整数位数
m:小数位数
6
二进制
? 特点:以 2为底,逢 2进位;
只有 0和 1两个符号。 (数后面加 B)
? 表示:
n:整数位数
m:小数位数
7
十六进制
? 特点:有 0--9及 A--F共 16个数字符号,
逢 16进位。 (数后面加 H)
? 表示:
n:整数位数
m:小数位数
8
任意 K进制数的表示
一般地,对任意一个 K进制数 S都可表示为
1 2 0
n 1 2 0
1
1
1
()
nn
kn
m
m
n
i
i
im
S S K S K S K
S K S K
SK
??
??
??
??
?
??
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?
???
其中:
Si -- S的 第 i位数码,可以是 K个符号中任何一个;
n,m – 整数和小数的位数;
K -- 基数;
Ki -- K进制数的权
9

? 234.98 或 (234.98)10
? 1101.11B 或 (1101.11)2
? ABCD, BFH 或 (ABCD, BF)16
10
二、各数制间的转换
? 非十进制数 → 十进制数:
按相应的 权表达式 展开, 再按十进制求和。
? 例,24.AH=2× 161+4× 160+A× 16-1
=36.625
注,A~ F分别用 10~ 15代入
11
十进制 → 非十进制数
? 十进制 → 二进制:
整数:除 2取余;
小数:乘 2取整。
? 十进制 → 十六进制:
整数:除 16取余;
小数:乘 16取整。
以小数点为起点求得整数和小数的每一位。
注:十进制转换成 任意 K进制数 与上类似,整:除 K取余,小数:乘 K取整。
12
十进制到十六进制转换例
400.25 = (? ) H
? 400/16=25 -----------余数 =0(个位)
? 25/16=1 --------------余数 =9(十位)
? 1/16=0 ---------------余数 =1(百位)
? 0.25× 16=4.0 -----------整数 =4( 1/10)
即,400.25 = 190.4H
13
二进制与十六进制间的转换
? 用 4位二进制数表示 1位十六进制数
0000 ------------- 0H
┇ ┇
1001 ------------- 9H
1010 ------------- AH
1011 ------------- BH
1100 ------------- CH
1101 ------------- DH
1110 ------------- EH
1111 ------------- FH
14
二进制与十六进制间的转换
例,10110001001.110 = (?)H
0101 1000 1001.1100
5 8 9, C
注意:位数不够时要补 0
15
§ 2.2 无符号二进制数的运算
二进制数
算术运算
逻辑运算
无符号数
有符号数, 算术运算
16
一、无符号数的算术运算
? 加法运算
? 减法运算
? 乘法运算
? 除法运算
17
注意点:
? 对加法,1+1=0(有进位)
? 对减法,0-1=1(有借位)
? 对乘法:仅有 1× 1=1,其余皆为 0;
乘以 2相当于左移一位。
? 对除法,除以 2则相当于右移 1位。
18

? 00001011× 0100=00101100B
? 00001011÷ 0100=00000010B
即:商 =00000010B
余数 =11B
19
二、无符号数的表示范围
◇ 一个 n位的无符号二进制数 X,其表示
范围为:
0 ≤ X ≤ 2 n-1
若运算结果超出这个范围,则产生溢出。
◇ 溢出的 判别方法:
运算时,当最高位向更高位有进位(或借位)
时则产生溢出 。
20
例:
最高位向前有进位,产生溢出。
本例中:运算结果为 256,超出8位二进制数所
能表示的范围 255。
21
三、逻辑运算
与 ( ∧ )
或( ∨ )
非( ▔ )
异或( ⊕ )
掌握,逻辑关系(真值表)和逻辑门。
特点:按位运算,无进位 /借位。
22
“与”、“或”运算
? 任何数和,0‖相“与”,结果为 0
? 任何数和,1‖相“或”,结果为 1
B
A C A
B
C& ≥1
A∧ B=C A∨ B=C
23
“非”、“异或”运算
? ―非”运算即按位求反
? 两个二进制数相“异或”:
相同则为 0,相异则为 1
A
A
B
C1 ⊕
B=A A B=C
B
24
“与非”、“或非”运算
A∧ B=C A∨ B=C
B
A C A
B
C& ≥1
25
四、译码器
? 74LS138译码器:
G1
G2A
G2B
C
B
A
Y0
Y7
?
?
?
?
3- 8译码器原理
译码使能端
译码输入端
译码输出端
26
74LS138真值表
使 能 端 输 入 端 输 出 端
G1 G2A G2B C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
? 0 1
? 1 0
? 1 1
0 ? ?
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
? ? ?
? ? ?
? ? ?
? ? ?
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 1 1 0 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 0
27
§ 2.3 符号数的表示及运算
计算机中的符号数的表示方法:
把二进制数的最高位定义为符号位 。
符号位:,0‖ 表示正,
,1‖ 表示负。
? 把符号也数值化了的数,称为 机器数 。
? 机器数所表示的真实的数值,称为 真值 。
注:后面的讲述均以 8位二进制数为例。
28

? +52 = +0110100 = 0 0110100
符号位 数值位
? -52 = -0110100 = 1 0110100
真值 机器数
29
一、符号数的表示:
? 对于符号数,机器数常用的表示方法有
原码, 反码 和 补码 三种。数 X的原码记作
[X]原,反码记作 [X]反,补码记作 [X]补 。
注意:对正数,三种表示法均相同。
它们的 差别在于对负数的表示 。
30
原码 [X]原
? 最高位为符号位,用,0‖表示正,用,1‖表示负;
数值部分照原样写出即可。
? 优点, 真值和其原码表示之间的对应关
系简单,容易理解;
? 缺点, 计算机中用原码进行加减运算比
较困难,0的表示不唯一 。
正式定义为:
1
1 1
2[]
2 2
≥0
0 ≥-
n
n n
X XX
X X
?
? ?
? ??
? ? ?
?原
31
数 0的原码
? +0=0 0000000
-0=1 0000000
即:数 0的原码不唯一。
32
原码的例子
真值,X= +18 = +0010010
X= -18 = -0010010
原码,[X]原 = 0 0010010
[X]原 = 1 0010010
符号 符号位
n位原码表示数值的范围是:
对应的原码是 111? 1 ~ 011? 1
( ) ~ ( )112 1 2 1nn??? ? ? ?
33
反码 [X]反
对一个数 X:
? 若 X>0,则 [X]反 =[X]原
? 若 X<0,则 [X]反 = 对应原码的符号位
不变,数值部分按位求反。
正式定义为:
1
1
2]
( 2 1 ) 2
≥0
0 ≥-
n
n n
X XX
X X
?
?
???
? ?? ?
?反
[
34
反码例
? X= -52 = -0110100
[X]原 =1 0110100
[X]反 =1 1001011
35
0的反码
[+0]反 =00000000
[-0]反 =11111111
即:数 0的反码也不是唯一的。
n位反码表示数值的范围是
对应的反码是 100? 0 ~ 011? 1
( ) ~ ( )112 1 2 1nn??? ? ? ?
36

补码 [X]补
定义,
? 若 X>0,则 [X]补 = [X]反 = [X]原
? 若 X<0,则 [X]补 = [X]反 +1
正式定义为:
[] 112 2 2- ≤<n n nX X X??? +
37

? X= –52= – 0110100
[X]原 =10110100
[X]反 =11001011
[X]补 = [X]反 +1=11001100
38
0的补码
? [+0]补 = [+0]原 =00000000
? [-0]补 = [-0]反 +1=11111111+1
=1 00000000
n位补码表示数值的范围是
对应的补码是 100? 0 ~ 011? 1
对 8位字长,进位被舍掉
~ ( )112 2 1nn??? ? ?
39
特殊数 10000000
? 该数在原码中定义为,-0
? 在反码中定义为,-127
? 在补码中定义为,-128
? 对无符号数,( 10000000) B=128
40
8/16位符号数的表示范围
对 8位二进制数:
? 原码,-127 ~ +127
? 反码,-127 ~ +127
? 补码,-128 ~ +127
对 16位二进制数:
? 原码,-32767 ~ +32767
? 反码,-32767 ~ +32767
? 补码,-32768 ~ +32767
41
符号二进制数与十进制的转换
对用补码表示的二进制数:
1)求出真值
2)进行转换
42

将一个用补码表示的二进制数转换为十进制数。
? [X]补 =0 0101110B 真值为,0101110B
正数
所以,X=+46
? [X]补 =1 1010010B 真值不等于,-1010010B
负数
而是,X= [[X]补 ]补 = [11010010]补
= - 0101110 = - 46
43
二、符号数的算术运算
? 通过引进补码,可将减法运算转换为加法运算。
? 即,[X+Y]补 = [X]补 +[Y]补
[X-Y]补 = [X+(-Y)]补 = [X]补 +[-Y]补
其中 X,Y为正负数均可,符号位参与运算。
44
补码的运算是基于模的运算
模 (module)就是一个计数系统的最大容量 。 例如钟表
的模为 12,8位二进制数的模为 28,等等 。
凡是用器件进行的运算都是有模运算,运算结果超过
模的部分会被运算器 自动丢弃 。因此,当 器件为 n位时,

X=2n+X (mod 2n)
根据定义,
[X]补 =2n+X (mod 2n)
因此可得,
[X?Y]补 = 2n + 2n + (X?Y) (mod 2n)
= (2n+X) + (2n ?Y) (mod 2n)
= [X]补 + [?Y]补
45

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
46
符号数运算中的溢出问题
? 两个 8位带符号二进制数相加或相减时,

C7?C6= 1
则结果产生溢出。
其中,C7为最高位的进 (借 )位;
C6为次高位的进 (借 )位。
对 16位或 32位的运算,也有类似结论。
47
观察以下四种情况哪个溢出?
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:
48
例:
? 若,X=01111000,Y=01101001
则,X+Y=
即,次高位向最高位有进位,而最高位向前无
进位,产生溢出。
(事实上,两正数相加得出负数,结果出错)
111000 01
011010 01
011110 00
?
49
§ 2.4 定点数与浮点数
? 定点数:小数点位置固定不变的数。
? 小数点的位置:
? 纯小数
? 纯整数
符号 X1 X2 Xn…
小数点位置
符号 X1 X2 Xn…
小数点位置
50
浮点数
? 浮点数来源于科学记数法
? 例如,+123.5=+0.123× 103
-0.001235=-0.123× 10-2
? 浮点数:用阶码和尾数表示的数,尾数通常为纯小数。
2E× F
数符 阶 E阶符 尾数 F
小数点位置
阶码
51
80x86中使用的 IEEE标准浮点数
? 单精度浮点数(阶码偏移 7FH)
? 双精度浮点数(阶码偏移 3FFH)
数符 阶 E(11位 ) 尾数 F(52位 ),整数部分默认为 1
小数点位置
数符 阶 E(8位 ) 尾数 F(23位 ),整数部分默认为 1
小数点位置
31 30 23 22 0
63 62 52 51 0
52
例:
? 将 1011.10101用 8位阶码,15位尾数的规格
化浮点数形式表示。
解:因为 1011.10101= 0.101110101× 24
所以要求的浮点数为:
0 0000100 101 1101 0100 00000
阶码阶符数符 尾数(后补 0到 15位)
? 用 IEEE标准单精度浮点数重做上题。
因为 1011.10101= 1.01110101× 23,阶为 7FH+3=82H=10000010B
所以要求的浮点数为:
0 10000010 011 1010 1000 0000 0000 0000
53
§ 2.4 计算机中的编码
用于表示非数值型数据。常用的二种:
? BCD码
? 用二进制编码的十进制数
? ASCII码
? 美国标准信息交换代码
54
BCD码
? 压缩 BCD码
? 用 4位二进制码表示一位十进制数,
一个字节可放 2位十进制数。
? 非压缩 BCD码
? 用 8位二进制码表示一位十进制数,
高 4位总为 0。
55
BCD码与二进制数之间的转换
? 先转换为十进制数,再转换二进制数;反
之同样。
? 例, (0001 0001,0010 0101)BCD
= 11,25
= 1011,01B
56
ASCII码
? 字符的编码,一般用 7位二进制码表示。
? 见教材附录 A
? 用 8位二进制数表示时,最高位总为 0,因
此最高位( D7位)可作为奇偶校验位。
? 熟悉 16进制数 0-F的 ASCII码:
? 30H-39H,41H-46H
57
ASCII码的校验
? 奇校验
加上校验位后编码中,1‖的个数为奇数。
例,A的 ASCII码是 41H( 1000001B),
以奇校验传送则为 C1H( 11000001B)
? 偶校验
加上校验位后编码中,1‖的个数为偶数。
上例若以偶校验传送,则为 41H。
58
结束语
掌握:
? 三种常用计数制及编码的表示及其相互间
的转换;
? 无符号二进制数的算术运算和逻辑运算;
? 符号数的表示及补码的运算;
? 基本逻辑门和译码器;
? 定点数及浮点数的表示方法。
59
作业:
? 2.2
? 2.6
? 2.7的( 1),( 3)小题
? 2.11
? 设 X=+100101,Y=-0110110
求 X+2Y=?