第二章 计算机信息表示与存储.docx
《第二章 计算机信息表示与存储.docx》由会员分享,可在线阅读,更多相关《第二章 计算机信息表示与存储.docx(34页珍藏版)》请在冰点文库上搜索。
![第二章 计算机信息表示与存储.docx](https://file1.bingdoc.com/fileroot1/2023-5/21/c31a1c98-5a7d-4b06-8a19-233d120eca17/c31a1c98-5a7d-4b06-8a19-233d120eca171.gif)
第二章计算机信息表示与存储
第二章计算机信息表示与存储
计算机的基本功能是对信息进行计算和处理加工。
那么什么是信息呢?
信息:
是用文字、数字、符号、声音、图形和图像等方式表示和传递的数据、知识和消息。
由于信息在计算机中是以器件的物理状态来表示的,通过物理器件的高低电平或开关状态来表示信息。
因此,为了表示更为方便和可靠,在计算机中主要采用了二进制数字系统。
存储在计算机中的信息都是用二进制数编码表示的。
计算机只识别这种二进制数字化的编码,所以信息只有进行编码才能通过计算机传送、存储和处理。
1.1进位计数制
进位计数制是一种数的表示方法,它按进位的方法来计数,简称为进位制。
常用的进制数有十进制数、二进制数、八进制数和十六进制数,下面分别讨论这四种进制数的表示和转换。
1.1.1不同数制的表示
1.十进制数
一个十进制数有两个主要的特点:
(1)有效数字:
0、1、2、3、4、5、6、7、8、9。
(2)逢“十”进位
假设十进制数从小数点起向左记录位数,个位记为0,十位记位1,百位记位2,以此类推;从小数点起向右记录位数,小数点后第一位记为-1,第二位记为-2,以此类推。
则假设每一位位数为n,则该位的权值等于10n,并且这个数可以表示为每一位的数字乘以位权值之和。
例如:
十进制数327.71
327.71:
326.71
位权值:
102101100.10-110-2
326.71=3*102+2*101+6*100+7*10-1+1*10-2
因此,任意一个十进制数D=Dn-1Dn-2…D1D0.D-1D-2…D-m,都可以表示为:
D=Dn-1×10n-1+Dn-2×10n-2+…+D1×101+D0×100
+D-1×10-1+D-2×10-2+…+D-m×10-m[1]
式[1]中10就称为计数制的底数(或称为基数),所以,就是十进制数。
2.二进制数
与十进制数类似,它也有两个主要特点:
(1)有效数字:
0和1。
(2)逢“二”进位
与十进制数的位数计算相同,假设每一位的位数是n,则该位的位权值是2n。
这个数可以表示为每一位的数字乘以位权值之和。
例如:
二进制数101.11
101.11:
101.11
位权值:
222021.2-12-2
101.11=1*22+0*21+1*20+1*2-1+1*2-2
任意一个二进制数B=Bn-1Bn-2…B1B0.B-1B-2…B-m都可以表示为:
B=Bn-1×2n-1+Bn-2×2n-2+…+B1×21+B0×20
+B-1×2-1+B-2×2-2+…+B-m×2-m[2]
式[2]中2是进位制的基数,故称为二进制。
3.八进制数
一个十进制数有两个主要的特点:
(3)有效数字:
0、1、2、3、4、5、6、7。
(4)逢“八”进位
与十进制数的位数计算相同,假设每一位的位数是n,则该位的位权值是8n。
这个数可以表示为每一位的数字乘以位权值之和。
例如:
八进指数175.14
175.14:
175.14
位权值:
828180.8-18-2
175.14=1*82+7*81+5*80+1*8-1+4*8-2
因此,任意一个八进制数O=On-1On-2…O1O0.O-1O-2…O-m,都可以表示为:
O=On-1×8n-1+On-2×8n-2+…+O1×81+O0×80
+O-1×8-1+O-2×8-2+…+O-m×8-m[3]
式[3]中8是为计数制的基数,故称八进制数。
4.十六进制数的表示
它也有两个特点:
(1)有效数字:
0-9及A、B、C、D、E、F。
(2)逢“16”进位
它与十进制、二进制、八进制之间的关系如表2.1所示。
表2.1二进制、八进制、十进制、十六进制数码对照表
十六进制数
十进制数
八进制数
二进资制数
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
20
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
10000
与十进制数的位数计算相同,假设每一位的位数是n,则该位的位权值是16n。
这个数可以表示为每一位的数字乘以位权值之和。
例如:
十六进指数43D.8
43D.8:
43D.8
位权值:
162161160.16-1
43D.8=4*162+3*161+13*160+8*16-1=1085.5
任意16进制的数H=Hn-1Hn-2…H1H0.H-1H-2…H-m,可以表示为:
H=Hn-1×16n-1+Hn-2×16n-2+…+H1×161+H0×160
+H-1×16-1+H-2×16-2+…+H-m×16-m[4]
式[4]种16为基数,故称为16进制。
综上四种计数制,可以把它们的特点概括为:
(1)有效数字:
不同进制数有效数字不同,如表2.2所示。
表2.2各种进位计数制
进制
有效数字
二进制
0
1
八进制
0
1
2
3
4
5
6
7
十进制
0
1
2
3
4
5
6
7
8
9
十六进制
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
(2)逢“J”进位,J为进制。
不同进制数的的每一个数位i,对应的权值为Ji,Ji就称为该位的“位权值”。
任意J进制的数X=Xn-1Xn-2…X1X0.X-1X-2…X-m,可以表示为:
X=Xn-1×Jn-1+Xn-2×Jn-2+…+X1×J1+X0×J0
+X-1×J-1+X-2×J-2+…+X-m×J-m[5]
1.1.2不同数制的转换
计算机中数的存储和运算都使用二进制数。
计算机在处理其它进制的数时,都必须转换成二进制数,处理完后,输出结果时,再把二进制数转换成常用的数制。
下面分别介绍不同数制间的转换方法。
1、二进制转换成八进制、十进制、十六进制
2、十进制转换成二进制、八进制、十六进制
1.二进制转换成八进制、十进制、十六进制
(1)二进制数转换成十进制数
方法:
每一位二进制数乘以对应的位权值,然后将各乘积相加。
例如:
将二进制数(101.11)2转换成十进制数。
B=1×22+0×21+1×20+1×2-1+1×2-2=(5.75)D
即:
(101.11)B=(5.75)D
思考:
根据二进制数转化成十进制数的规律,请问如何将八进制数、十六进制数转换成十进制数?
(2)二进制数转换成八进制数
方法:
从小数点开始,向左每3位二进制数分成一组,高位不足3位补0;
从小数点开始,向右每3位二进制数分成一组,低位不足3位补0;
然后按对应位置写出每组二进制数等值的八进制数及对应的小数点,即可。
例如:
将二进制数1011010111.101转换成八进制数。
001011010111.101
1327.5
即:
(1011010111.101)B=(1327.5)O
思考:
根据二进制数转化成八进制数的规律,请问如何将八进制数转换成二进制数?
解答:
二进制数和八进制数之间的对应关系如表2.3所示,因此将每一位八进制数转化成3位二进制数,在将这些二进制数连接起来去掉首尾的0即可。
表2.3二进制数和八进制数的对应关系
进制
对应关系
二进制
000
001
010
011
100
101
110
111
八进制
0
1
2
3
4
5
6
7
例如:
八进制数(315.26)O
(315.26)O=(011001101.010110)B=(11001101.01011)B
(3)二进制数转换成十六进制数
方法:
从小数点开始,向左每4位二进制数分成一组,高位不足4位补0;
从小数点开始,向右每4位二进制数分成一组,低位不足4位补0;
然后按对应位置写出每组二进制数等值的十六进制数及对应的小数点,即可。
例如:
将二进制数1011010111.101转换成十六进制数。
001011010111.1010
2D7.A
即:
(1011010111.101)B=(2D7.A)H
思考:
根据二进制数转化成十六进制数的规律,请问如何将十六进制数转换成二进制数?
解答:
二进制数和十六进制数之间的对应关系如表2-1所示,因此将每一位十六进制数专化成4位二进制数,在将这些二进制数连接起来去掉首尾的0即可。
例如:
十六进制数(3A5.2E)H
(3A5.2E)H=(001110100101.00101110)B=(1110100101.0010111)B
2.十进制转换成二进制、八进制、十六进制
(1)十进制数转换成二进制数
十进制数转换成二进制数较为复杂,分成整数部分和小数部分分别转化。
Ø整数的转换
方法:
除2取余,逆序读数
Ø小数的转换
方法:
乘2取整,顺序读数
例如:
将十进制数28.125转换为二进制数。
整数部分(28)D=(11100)B
小数部分(0.125)D=(0.001)B
所以(28.125)D=(11100.001)B
(2)十进制整数转换成八进制数
与十进制整数转换成二进制相似,也分成整数部分和小数部分两部分分别转换。
Ø整数部分:
方法:
除8取余,逆序读数。
Ø小数部分
方法:
乘8取整,顺序读数。
例如:
将十进制数28.125转换成八进制数
整数部分(28)D=(34)O
小数部分(0.125)D=(0.1)O
所以:
(28.125)D=(34.1)O
(3)十进制整数转换成十六进制数
与十进制整数转换成二进制相似,也分成整数部分和小数部分两部分分别转换。
Ø整数部分:
方法:
除16取余,逆序读数。
Ø小数部分
方法:
乘16取整,顺序读数。
例如:
将十进制数4586.32转换成十六进制数。
整数部分:
(4586)D=(11EA)H
小数部分:
(0.32)D=(0.51F)H
所以(4586.32)D=(11EA.51F)H
注意:
十进制数的小数转换成二进制数、十六进制数的小数时,一般情况下需要保留2-3位,最后一位不需要四舍五入。
1.1.3基本的二进制运算
二进制运算同十进制运算一样都要遵循一定运算法则,一位二进制数的加、减、乘、除运算如表2.4所示。
表2.4一位二进制数运算
加
减
乘
除
1+1=0(进位)
1-1=0
1*1=1
1/1=1
1+0=1
1-0=1
1*0=0
0/1=0
0+1=1
0-1=1(借位)
0*1=1
0+0=0
0-0=0
0*0=0
例如:
101.10+11.01等于多少?
101.10
+11.01
1000.11
解答:
101.10+11.01=1000.11
例如:
101.10*10.1等于多少?
101.10
*10.1
10.110
000.00
1011.0
1101.110
解答:
101.10*10.1=1101.110
2.3数值编码
计算机用来处理数值计算的问题非常方便,实际生活中,我们常用的数值是整数和实数;但是,计算机中根据数据表示的范围和特点不同,计算机在进行数据编码和存储时采用不同的处理的方式,分别为:
♦带符号数:
用来表示整数
♦定点数:
用来表示纯小数或整数,其中小数点在数中的位置是固定的
♦浮点数:
用来表示实数,其中小数点在数中的位置是浮动的。
首先,计算机对数据进行编码和存储时,对于不同的数据应该使用不同的存储长度和单位,那么计算机中数据的常用单位有哪些呢?
计算机中常用的数据单位有位(bit)、字节(Byte)和字(Word)。
(1)位bit
位是指一位二进制数。
计算机只识别二进制数,即在计算机内部,运算器运算的是二进制数。
位是计算机中数据的最小单位。
一位二进制数只能表示两种状态“0”或“1”。
两位二进制数能表示4种状态(00、10、01、11)。
依此类推,用n位二进制数能表示2n种状态。
二进制位数越多能表示的状态(代表的符号)就越多。
(2)字节Byte
计算机除了能够进行数值计算,还能够表示各种字符(包括各种符号、数字、字母等),这些字符大约在128到256个,需要用7到8位二进制数表示。
因此,人们选定8位为1个字节。
即1个字节由8个二进制数位组成。
字节是计算机中用来表示存储空间大小的最基本的容量单位。
如计算机的内存容量,磁盘的容量等都是以字节为单位表示的。
除字节(Byte,简化为B)为单位表示存储空间的容量外,还可以用千字节(KB)、兆字节(MB)及吉字节(GB)等表示存储空间容量。
1KB=1024B
1MB=1024KB
1GB=1024MB
(3)字Word
数据的另一个单位就是计算机的字长。
字长是字的长度,是指计算机能同时进行多少位的二进制数的并行计算,也就是运算器的长度。
字长是计算机性能的重要标志。
不同档次的计算机有不同的字长。
按计算机的字长可分为8位机(如苹果II、中佛学习机)、16位机(如286机)、32位机(如386、486机、PentiumⅡ、PentiumⅢ)等。
显然,字长越长,运算精度越高,运算速度相对也越快。
2.3.1带符号数的表示方式
计算机中数的存储和运算都使用二进制数,但2.1节、2.2节提到的二进制数均未涉及符号,因而是一种无符号数。
那么计算机中正负数怎样表示呢?
这就要对数值进行编码,同时把数的符号也进行编码。
带有数码化了的正负号的数称为机器数。
计算机中的机器数采用三种编码方式:
原码、反码、补码。
1.原码
机器数的最高位是其符号位,0表示正数,1表示负数;其余各位为数值,这种数的表示法称为原码。
为了方便理解和计算,我们使用一个字节长度的二进制数进行编码。
一个字节的二进制数由8个二进制bit位组成,其最高位是其符号位,0表示正数,1表示负数;其余7位为数值。
例如:
十进制数76,转换成二进制数为:
(76)D=(1001100)B,于是
以+76和-76为例,原码的表示方法,除了符号位不同外,数值位相同。
原码表示法简单,但是计算时,若两个异号数相加或两个同号数相减,必须做减法。
为了把减法运算转换为加法运算,引进了反码和补码。
2.反码
反码的编码规则:
Ø正数的反码:
与原码相同
Ø负数的反码:
符号位不变,数值位按位取反
例如:
(+5)反=(+5)原=00000101
(-5)原=10000101
(-5)反=11111010
一些特殊数值的反码,比如:
(+0)反=00000000
(-0)反=11111111
(+127)反=01111111
(-127)反=10000000
实际计算中,若已知(x)反=11001001,则x=-(00110110)2=-54
3.补码
补码的编码原则:
Ø正数的补码:
与原码相同
Ø负数的补码:
符号位不变,数值位按位取反,最低位加1
例如:
(+5)补=(+5)反=(+5)原=00000101
(-5)原=10000101
(-5)反=11111010
(-5)补=11111011
一些特殊数值的补码,比如:
(+0)补=(-0)补=00000000
(+127)补=01111111
(-127)补=10000001
(-128)补=10000000
计算补码的技巧:
已知+5的原码R=00000101,则-5的补码为:
28-R=11111011。
100000000
-00000101
11111011
其中28=100000000称为8位补码的模
例如:
已知一个数的补码是10100110,求该数的反码和原码,并写出该数。
解答:
假设该数为X,则已知
(X)补=10100110
(X)反=(X)补-1=10100101
(X)原=11011010=-90
8位二进制数的原码、反码和补码列于表2.5中。
表2.5二进制数的原码、反码和补码表
二进制数码表示
十进制数值
无符号数
原码
反码
补码
00000000
00000001
00000010
:
01111110
01111111
10000000
10000001
10000010
:
:
11111101
11111110
11111111
0
1
2
:
126
127
128
129
130
253
254
255
+0
+1
+2
:
+126
+127
-0
-1
-2
:
:
-125
-126
-127
+0
+1
+2
:
+126
+127
-127
-126
-125
:
:
-2
-1
-0
+0
+1
+2
:
+126
+127
-128
-127
-126
:
:
-3
-2
-1
4.补码运算
引入补码的主要目的在于简化减法运算,可以把减法运算用补码加法来实现。
计算机中就只有加法计算。
补码运算定律:
(x+y)补=(x)补+(y)补
下面根据x和y的符号和绝对值的大小,分四种情况举例验证:
(1)两个正数相加
x=3DH=0111101By=21H=0100001B
(x)补=00111101(y)补=00100001
(x)补+(y)补=00111101+00100001=01011110
(x+y)补=(5EH)补=01011110
所以:
(x+y)补=(x)补+(y)补
(2)两个负数相加
x=-3DH=-0111101By=-21H=-0100001B
(x)补=11000011(y)补=11011111
(x)补+(y)补=11000011+11011111=10100010
注意:
按位相加过程中,超出8位的位丢弃。
(x+y)补=(-1011110)补=10100010
所以:
(x+y)补=(x)补+(y)补
(3)正数x和负数y相加,且|x|>|y|
x=3DH=0111101By=-21H=-0100001B
(x)补=00111101(y)补=11011111
(x)补+(y)补=00111101+11011111=00011100
注意:
按位相加过程中,超出8位的位丢弃。
(x+y)补=(1CH)补=00011100
所以:
(x+y)补=(x)补+(y)补
(4)正数x和负数y相加,且|x|<|y|
x=21H=0100001By=-3DH=-0111101B
(x)补=00100001(y)补=11000011
(x)补+(y)补=00100001+11000011=11100100
(x+y)补=(-1CH)补=(-0011100)补=11100100
所以:
(x+y)补=(x)补+(y)补
需要注意的是,补码是有一定范围的。
对于8位补码来说,其范围是-128~+127。
所以当两个正数相加,如果运算结果超出该范围时,得到的结果就是负数;当两个负数相加(或者负数减正数),如果运算结果超出该范围时,得到的结果就是正数;这种情况,我们称之为溢出。
例如:
64+67
数学运算:
64+67=131
补码运算:
(64)补+(67)补=01000000+01000011=10000011=-125
因为131>127了,超出了8位补码所能表示的范围,产生了溢出,得到结果是-125。
例如:
-64-67
数学运算:
-64-67=-131
补码运算:
(-64)补+(-67)补=11000000+10111101=01111101=125
因为-131<-128了,超出了8位补码所能表示的范围,产生了溢出,得到结果是125。
如果两个正数相加之和大于127,称为正向溢出;如果两个负数之和小于-128,就会产生负向溢出。
防止溢出的办法是用更多的位,如16位、32位来表示数。
目前,在实际应用的32位计算机中使用32位补码来表示整数的,根据8位补码的规则,可以知道,32位补码所能表示的范围是-231~231-1。
因此,使用计算机进行整数运算时,使用补码运算规则,所以如果超出了32位补码的范围,同样会引起溢出。
2.3.2定点数
采用定点表示法的数据叫做定点数,定点数是指小数点位置固定不变的数。
为了简单,定点数中的小数点位置只允许固定在数的开头或数的末尾。
因此,定点数分为两类:
定点小数和定点整数。
Ø定点小数
小数点位置固定在数的开头,那么定点小数九就是纯小数。
Ø定点整数
小数点位置固定在数的末尾,那么定点数表示的是整数。
以8位定点数为例,定点小数和定点整数的表示方式如图2.1、2.2所示。
图2.1定点小数图2.2定点整数
可以看出定点数所能表示的数值的范围很有限,而且只能表示纯小数或者整数,二者不可兼顾。
2.3.3浮点数
浮点数一般采用科学记数法的方式表示,比如:
-1209460000=-1.20946*109
其中“-”表示数的符号,“1.20946”称为尾