第二节 计算机中数的表示和编码一,N进制数
1,N进制数的表示法 (自学 )
2,N进制数与十进制数的转换 (自学 )
3,二进制与十六进制数的转换二,二进制数和十六进制数运算
1,算术运算
2,逻辑运算三,计算机内数的表示
1,无符号数
2,带符号数
1) 求补运算
2) 补码
3) 补码的真值计算
4) 用补码表示带符号数的意义
3,8位,16位数的表示范围
4,进位,借位,溢出的判断四,二进制编码
ASCII (美国标准信息交换码 )
第二节 计算机中数的表示和编码一,N进制数二,二进制数和十六进制数运算三,计算机内数的表示四,二进制编码一,N进制数
1,N进制数的表示法
2,N进制数与十进制数的转换
3,二进制与十六进制数的转换
1,N进制数的表示法
十进制数基数 10,遵循逢 10进位数码 10个,0,1,2,3,4,5,6,7,8,9
如,(123,5)10 或 123,5D 或 123,5
数值大小计算,
123,5 = 1 × 102 + 2 × 101 + 3 × 100 + 5 × 10-1
N进制数基数 N,遵循逢 N进位数码 N个,0,1,2,、、、,N-1
数值大小计算,
(AnAn-1,、,A0,A-1A-2,、,A-m)N
= An × Nn + An-1× Nn-1+,、,+ A1 × N1 + A0× N0
+ A-1 × N-1 + A-2 × N-2 +,、,+ A-m × N-m
二进制数基数 2,遵循逢 2进位数码 2个,0,1
( 101101,1 ) 2 或 101101,1 B
= 1 × 25 + 0 × 24+ 1 × 23+ 1 × 22 + 0 × 21+ 1 × 20
+ 1 × 2-1 = 45,5D
十六进制数基数 16,遵循逢 16进位数码 16个,0,1,、、、,9,A,B,C,D,E,F
( BF3C,8 )16 或 BF3C,8 H
=11 × 163 + 15 × 16 2+ 3 × 161+ 12 × 160 +8 × 16-1
=48956,5D
十六进制数 A B C D E F
十进制数 10 11 12 13 14 15
2,N进制数与十进制数的转换
1) N进制数 → 十进制数方法,与数值大小计算过程相同 。
例,101101,1 B = 1 × 25 + 0 × 24+ 1 × 23+ 1 × 22 +0 × 21
+ 1 × 20 + 1 × 2-1
= 45,5 D
BF3C,8 H = 11 × 163 + 15 × 16 2+ 3 × 161+ 12 × 160
+ 8 × 16-1
= 48956,5D
2) 十进制数 → N进制数用除法和乘法完成整数部分:除 N取余,商零为止,结果先低后高小数部分:乘 N取整,到零为止,结果先高后低整数部分:除 N取余,商零为止,结果先低后高例 1 十进制数 → 二进制数
125,125D → 二进制数
2 125 取余
2 62 1 低位
2 31 0
2 15 1
2 7 1
2 3 1
2 1 1
0 1 高位先低后高,故,125D = 111 1101B商为 0
小数部分:乘 N取整,到零为止,结果先高后低取整
0,125× 2 = 0,25 0 高位
0,25 × 2 = 0,5 0
0,5 × 2 = 1,0 1 低位先高后低,故,0,125D =0,001B
将整数部分和小数部分结合起来,
故,125,125D = 111 1101,001B
小数为 0
例 2 十进制数 → 十六进制数
125,125D → 十六进制数整数部分:除 N取余,商零为止,结果先低后高
16 125 取余
16 7 13 低位
0 7 高位故,125D = 7DH
小数部分:乘 N取整,到零为止,结果先高后低取整
0,125 × 16 = 2,0 2
故,0,125D = 0,2H
将整数部分和小数部分结合,125,125D =7D,2H
小数为 0
商为 0
若小数部分永不为零,可取近似值 。
例 0,7 D =? H
0,7 × 16 = 11,2
0,2 × 16 = 3,2
0,2 × 16 = 3,2
故 0,7 D = 0,B333 H
3,二进制数与十六进制数的转换
1) 二进制数与十六进制数间的关系
2) 二进制数 → 十六进制数
3) 十六进制数 → 二进制数
1) 二进制数与十六进制数间的关系十六进制数的基数 16 = 24
1位十六进制数对应 4位二进制数十进制数 二进制数 十六进制数
0 0000 0
1 0001 1
2 0010 2
3 001 1 3
4 0100 4
5 0101 5
6 01 10 6
7 01 1 1 7
8 1000 8
9 1001 9
10 1010 A
11 101 1 B
12 1 100 C
13 1 101 D
14 1 1 10 E
15 1111 F
2) 二进制数 → 十六进制数方法:
以小数点为基准,分别向左和向右每 4位划为一组,
不足 4位用 0补,每一组用其对应的十六进制数代替 。
例:
11110,01B = 0001 1110,0100 B
= 1 E,4 H
1111101,001B = 0111 1101,0010 B
= 7 D,2 H
3) 十六进制数 → 二进制数方法:
将每位十六进制数用其对应的 4位二进制数代替即可 。
例,
1E,4H = 0001 1110,0100B = 11110,01B
7D,2H = 0111 1101,0010B = 111 1101,001B
十进制数与二进制数之间的转换需计算,不直观;
二进制表示的数位多不便于书写,阅读;
十六进制数与二进制数间转换方便,直观,
相对于二进制数,十六进制数书写,阅读相对方便 。
思考,计算机采用二进制形式表示数据和指令,
在书写,显示上 引进十六进制的意义 是什么?
计算机内部使用十六进制吗?
D:\>DEBUG↙ ;进入 DEBUG
- R↙ ;显示各寄存器内容
AX=0000 BX=0000 CX=0000 DX=0000
SP=FFEE BP=0000 SI=0000 DI=0000
DS=1271 ES=1271 SS=1271 CS=1271 IP=0100
NV UP EI PL NZ NA PO NC
1271:0100 B83412 MOV AX,1234
- D 0:0 ↙ ;显示内存 0~7Fh单元的 内容
0000:0000 9E 0F C9 D8 65 04 70 00-16 00 13 08 65 04 70 00
0000:0010 65 04 70 00 54 FF 00 F0-58 7F 00 F0 F5 E7 00 F0
0000:0020 00 00 00 D0 28 00 13 08-6F EF 00 F0 6F EF 00 F0
0000:0030 6F EF 00 F0 6F EF 00 F0-9A 00 13 08 65 04 70 00
0000:0040 07 00 70 D0 4D F8 00 F0-41 F8 00 F0 07 25 61 FD
0000:0050 39 E7 00 F0 40 02 5C 02-2D 04 70 00 28 0A 5C 03
0000:0060 A4 E7 00 F0 2F 00 D4 08-6E FE 00 F0 04 06 5C 03
0000:0070 1D 00 00 D0 A4 F0 00 F0-22 05 00 00 34 12 00 C0

二,二进制数和十六进制数运算
1,算术运算二进制数和十六进制数加,减,乘,除,与十进制数类似
2,逻辑运算 (第二章逻辑指令中介绍 )
二进制数运算,与,或,非,异或,特点:按位进行
1,算术运算
1) 二进制数 加法 逢 2进 1
减法 借 1为 2
8位运算器:参加运算的数及结果均以 8位表示,
最高位产生的进位或借位在 8位运算器中不保存,
而将其保存到标志寄存器中
1 0 1 1 0 1 0 1 0 1 0 0 0 1 0 0
+ 1 0 0 0 1 1 1 1 - 1 0 1 0 0 1 0 1
进位 1 1 1 1 1 1 1 借位 1 1 1 1 1 1 1
0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 1
例 二进制运算 (以 8位运算器为例)
2) 十六进制数 加法 逢 16进 1
减法 借 1为 16
B 5 H 4 4 H
+ 8 F H - A 5 H
进位 1 1 借位 1 1
4 4 H 9 F H
例 十六进制运算
1 0 1 1 0 1 0 1 B 0 1 0 0 0 1 0 0 B
+ 1 0 0 0 1 1 1 1 B - 1 0 1 0 0 1 0 1 B
进位 1 1 1 1 1 1 1 借位 1 1 1 1 1 1 1
0 1 0 0 0 1 0 0 B 1 0 0 1 1 1 1 1 B
结果与二进制计算相同:
三,计算机内数的表示
1,无符号数
2,带符号数
1) 求补运算
2) 补码
3) 补码的真值计算
4) 用补码表示带符号数的意义
3,8位,16位数的表示范围
4,进位,借位,溢出的判断
1,无符号数二进制数的各位均表示数值大小,最高位无符号意义 。
例 1111 0000 B = F0H = 15× 16 = 240D
1001 0001 B = 91H = 9× 16 + 1= 145 D
应用场合:
处理的数全是正数时,如表示地址的数
2,带符号数
数有正,负 → 带符号数
在计算机中符号也用二进制数表示
计算机中用 补码 表示带符号数
1) 求补运算对一个二进制数按位取反,最低位加 1。
等价于,0 - 该二进制数例,对 8 位 二进制数 11110001B进行求补运算方法 1:按位取反,最低位加 1
1111 0001 B
取反 0000 1110 B
加 1 1
0000 1111 B
最高位借位超出 8位自然丢失方法 2,0 - 该二进制数
0000 0000 B 0 0 H
- 1111 0001 B - F 1 H
11111 111 1 1
0000 1111 B 0 F H
2) 补码在计算机中,用补码表示 带符号数 。
补码的表示方法:
正数的补码,最高位为 0,
其它各位为数字位,表示数的大小。
负数的补码,通过对该数正数的补码进行 求补运算 得到。
负数的补码最高位为 1。
例 求 105D 的补码
2 105
2 52 1
2 26 0
2 13 0
2 6 1
2 3 0
2 1 1
0 1
正数的补码:最高位为 0
其它各位为数字位,表示数的大小 。
[ 105D ] 补
= 0110 1001B = 69 H (8位 )
= 0000 0000 0110 1001 B= 0069 H (16位 )
例 求 – 105D的补码负数的补码:通过对该数正数的补码进行求补运算得到。
16位,[–105D] 补 = 0 – [105D] 补
= 0 – 0000 0000 0110 1001B = 0 – 0069H
= 1111 1111 1001 0111B = F F 9 7 H
8位,[– 105D] 补 = 0 – [105D] 补
= 0 – 0110 1001B = 0 – 69H
= 10010111B = 97 H
3) 补码的真值计算真值,补码表示的数值大小 。
- D 2000:0 ↙ ;显示内存块 2000,0~7Fh单元的 内容
2000:0000 9E 0F C9 D8 65 04 70 00-16 00 13 08 65 04 70 00
2000:0010 65 04 70 00 54 FF 00 F0-58 7F 00 F0 F5 E7 00 F0
2000:0020 00 00 00 D0 28 00 13 08-6F EF 00 F0 6F EF 00 F0
2000:0030 6F EF 00 F0 6F EF 00 F0-9A 00 13 08 65 04 70 00
2000:0040 07 00 70 D0 4D F8 00 F0-41 F8 00 F0 07 25 61 FD
2000:0050 39 E7 00 F0 40 02 5C 02-2D 04 70 00 28 0A 5C 03
2000:0060 A4 E7 00 F0 2F 00 D4 08-6E FE 00 F0 04 06 5C 03
2000:0070 1D 00 00 D0 A4 F0 00 F0-22 05 00 00 34 12 00 C0

如,用 DEBUG查看到存放在内存中的一组符号数:
如何知道它们表示的大小?
求补码真值的方法:
先判断是正数,还是负数。
由最高位判断,0 → 正数
1 → 负数
再求数值大小对正数,补码的真值等于该二进制数值。
对负数,先对该数进行求补运算,再求数值大小。
例 求补码 7D H 的真值,
7D H = 0111 1101B,最高位为 0,是正数
7DH的真值 = 7 × 16 + 13 = 125 D
例 求补码 91H 的真值,
91H = 1001 0001B,最高位为 1,是负数。
对 91H进行求补运算:
91H 求 补 00H – 91H = 6F H
91H的真值 = – 6FH = – ( 6× 16 +15 ) = – 111D
4) 用补码表示带符号数的意义 计算机中用补码表示带符号数 。
(1) 将减法用加法实现,省去减法器,简化硬件。
计算机中,减法实现过程,(补码减法)
先对减数进行求补运算(求反加 1,也是加法)
再将求补后的数与被减数相加
相加的结果即为用补码表示的两数相减结果。
01011010
+ 1
01011011
+ 01000100?
01000100B
- 10100101B
计算:
10011111
计算机中实现过程:
▲ 补码减法 的计算结果与 常规减法 的结果相同 。
▲ 人在计算时,可用常规减法
(补码减法,对人来说,相对复杂 )
补码减法:
01000100 B
- 10100101 B
借位 1 111111
10011111 B
常规减法:
01011010
+ 1
01011011
+ 01000100?
01000100B
- 10100101B
计算:
10011111
2) 无符号数及带符号数的加减运算用同一电路完成 。
在计算机中计算 看作无符号数 看作带符号数
11 11 000 1
+ 00 00 1 100
111 1 1 101
241
+ 12
253
( 15 )
+ ( + 1 2 )
3
11 11 000 1
00 00 110 0
111 0 0 101
241
12
229
( 15 )
( + 1 2 )
27
例,8位运算器即指令系统中加、减运算 不区分 无符号数或带符号数。
3,8位,16位二进制数的表示范围无符号数 带符号数
8 位 0 ~ 255 - 128 ~ 127
16 位 0 ~ 65535 - 32768 ~ 32767
规定,
8位 1000 0000B 即 80H为 – 128D
16位 1000 0000 0000 0000B 即 8000H 为 – 32768D
4,进位,借位,溢出的判断
1) 进位在加法过程中,最高有效位向高位产生进位 。
对 8位运算,指 D7产生进位对 16位运算,指 D15产生进位
2) 借位在减法过程中,最高有效位向高位产生借位 。
对 8位运算,指 D7产生借位对 16位运算,指 D15产生借位
3) 溢出指加减运算结果超出带符号数表示的范围 。
8位 -128 ~127
16位 -32768 ~ 32767
溢出的判断方法:
由参与运算的两数及其结果的 符号位 进行判断,结论:
符号相同的两数相加,
所得结果的符号与之相反,结果溢出 。
符号相异的两数相减,
所得结果的符号与减数相同,结果溢出 。
其他情况,不会产生溢出 。
符号相异的两数相加,或符号相同的两数相减注意,进位,借位 与 溢出 的区别。
进位丢失例,加法 补码真值
0111 1111 127
+ 0000 0010 + 2
1000 0001 -127
正 + 正 负,无进位,产生溢出,结果错
1000 0001 -127
+ 11000 0010 + -126
0000 0011 + 3
负 + 负 正,有进位,产生溢出,结果错例,减法 补码真值
0000 0010 2
- 11000 0001 - -127
1000 0001 -127
正 - 负 负,有借位,产生溢出,结果错
1000 0001 -127
- 0000 0010 - 2
0111 1111 +127
负 - 正 正,无借位,产生溢出,结果错借位丢失四,二进制编码
计算机处理的信息:数值,字符 (字母,汉字等 )
各字符在计算机中由若干位的二进制数表示
二进制数与字符之间一一对应的关系,称字符的二进制编码 。
ASCII( 美国标准信息交换码 )
微机中普遍采用的字符编码,如键盘,打印机,显示器等
ASCI I
数字 0 ~ 9 30H ~ 39H
小写 a ~ z 61H ~ 7AH
大写 A ~ Z 41H ~ 5AH
回车符 0 DH
换行符 0AH
D:\>DEBUG? ;进入 DEBUG
-E DS:0 ‘Hello World!’? ;向当前数据段填写入字符串
-D DS:0? ;查看字符串在内存存放情况
1693:0000 48 65 6C 6C 6F 20 57 6F-72 6C 64 21 18 10 8A 03 Hello World!....
1693:0010 18 10 17 03 18 10 23 0E-01 01 01 00 02 FF FF FF,.....#.........
1693:0020 FF FF FF FF FF FF FF FF-FF FF FF FF E7 0F 4E 01,.............N.
1693:0030 1F 14 14 00 18 00 93 16-FF FF FF FF 00 00 00 00,...............
1693:0040 07 0A 00 00 00 00 00 00-00 00 00 00 00 00 00 00,...............
1693:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20,!...........
1693:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20,....
1693:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00,.......
-Q? ;退出 DEBUG
1693:0000 48 65 6C 6C 6F 20 57 6F-72 6C 64 21 18 10 8A 03
H e l l o W o r l d !,,,,
例 在 DEBUG下查看字符串在内存的存放情况: