本章先介绍信息和数据的概念;然后介绍信息在计算机中的表示、编码、存储与运算
的过程,具体内容包括十进制、二进制、八进制和十六进制四种数制及其转换,位、字节和
字长的概念,整数的真值、机器数和在计算机中的补码表示,实数在计算机中的浮点表示, 
英文字符和汉字等非数值信息在计算机中的编码,多媒体中的声音、图像、视频等复杂信
息在计算机中的数字化过程以及编码;最后介绍二进制数的算术运算和布尔逻辑运算,数
字逻辑电路中基本的逻辑门电路的知识,以及门电路作为存储器和运算器的应用。通过
本章的学习,读者对计算机中的信息处理过程将有一个更清晰的认识,从而在使用计算机
求解现实问题的过程中能更好地把握信息的实质和更合理地处理信息。

5.数与进制
1 

本节介绍信息和数据的概念,数的十进制、二进制、八进制、十六进制四种常见的进制
表示,数制转换以及各种进制数的算术运算。

5.1 
信息与数据
1.
信息的广义解释是对现实世界中事物的存在方式或运动状态的反映。从信息论的角

度理解信息,则是对事物运动状态或存在方式的不确定性的描述。在通信行业,信息又定

义为用于消除通信对方知识上的不确定性的东西。

在计算机科学中,信息通常被认为是能够用计算机处理的任何有意义的内容或消息, 

它们一般以数据的形式表达,如数字、字符、文本、图像、视频、声音等,而且计算机可以完

成信息的表示、存储、传输和处理等过程。

与信息对应的另一个概念则是数据。数据是描述现实世界事物的符号,即用物理符
号记录下来的可以鉴别的信息。其中,物理符号可以是数字、文字、图形、图像、声音及其
他特殊符号等。数据作为信息的载体,其多种表现形式可以经过数字化后存入计算机中。

信息与数据是两个既有联系又有区别的概念。数据是信息的符号表示,或称载体;信
息是数据的内涵,是数据的语义解释;数据是信息存在的一种形式,只有通过解释和处理
才能成为有用的信息;数据可用不同的形式表示,而信息不会随数据的形式而改变。

对于生活中的信息来说,同一信息可以有不同的表示方法,表达信息的形式还可以相


互转换。而在计算机科学中,信息的表示形式可以是一种符号表示,即数学上的数据;信
息可以转换为物理器件的状态表示,例如,电平的高低、磁极的方向、电路的开闭等。由于
电信号具有连续形式,但计算机又受到实现条件的制约,只能表示离散形式的信息,这就
给现代计算机采用二进制提出了客观需求。

计算机采用二进制的第一个原因是二进位记数制仅有两个数码0和1,所以,任何具
有两个不同稳定状态的元件都可用来表示数的一位。现实中这种具有两种截然不同的稳
定状态的元件非常多,例如,氖灯的“亮”和“熄”、阀门的“开”和“关”、电压的“高”和“低”以
及“正”和“负”;纸带上的“有孔”和“无孔”、电路中的“有信号”和“无信号”以及磁性材料的
“南极”和“北极”等。利用两种截然不同的稳定状态来表示数据不但很容易实现,简化设
计的复杂性,而且两种截然不同的稳定状态既是量的不同,更是质的差别,对提高机器的
抗干扰能力和可靠性很有好处,况且现实中具有两种以上状态的简单而可靠的器件也不
易寻找。

计算机采用二进制的第二个原因是二进位记数制的四则运算规则十分简单,而且四
则运算最后都可以归结为加法和移位运算,这使得计算机中的运算器电路设计起来变得
非常容易。简化的表示也带来运算速度的大幅度提高,而人们平常使用的十进位记数制
是无法胜任计算机的高速运算的。

综上所述,现代计算机一般采用二进制的0、1来表示物理上的两种状态,用不同的
0、1序列表示不同的信息,每一个二进制位称为一个比特(bit),也称为“位”,简写为b,是
信息的最小单位。位”常用来描述速率(即单位时间内传输的二进制位数),如常说的网
速是100M,指的是每秒钟传输100M位。而根据计算机物理器件的构造特性,在计算机
中,信息的基本单位约定为8b,叫作1字节(Byte,B)。字节”常用来表示存储空间的大
小,如常说的内存8G指的是8GB 。

除位(b)、字节(B)外,随着数据量的增大,常用的数据单位还有KB 、MB 、GB 、TB等。

换算关系如下。
1B(Byte,字节)=8b(bit,比特)
1KB(Kilobyte,千字节)=1024B=210B 
1MB(Megabyte,兆字节,百万字节,简称“兆”)=1024KB=220B 
1GB(Gigabyte,吉字节,十亿字节,又称“千兆”)=1024MB=230B 
1TB(Terabyte,万亿字节,太字节)=1024GB=240B 
1PB(Petabyte,千万亿字节,拍字节)=1024TB=250B 
1EB(Exabyte,百亿亿字节,艾字节)=1024PB=260B 
1ZB(Zetabyte,十万亿亿字节,泽字节)=1024EB=270B 
1YB(Yotabyte,一亿亿亿字节,尧字节)=1024ZB=280B 
1BB(Brontobyte,一千亿亿亿字节)=1024YB=290B 
1NB(NonaByte,一百万亿亿亿字节)=1024BB=2100B 
1DB(DoggaByte,十亿亿亿亿字节)=1024NB=2110B 
【例5-1】计算一块标称512GB的硬盘的实际容量。
【解】市场上买到的标称512GB的硬盘,在计算机上查看其实际容量,发现差很多。


051
实际上,商家是按1000 来进行单位换算的,所以,标称512GB 的硬盘实际容量为
512×1000×1000×1000=512000000000(B)
按计算机的标准换算,它的容量是

512000000000/1024/1024/1024=837(
所以在计算机上看到的会是476GB 。
476.GB)
【例5-2】计算百兆宽带的下载速度,每秒下载多少字节的数据
?


所以
【
, 
解】下载速度100M 指的是二进制位,而这里的兆(M)是按106 换算得到的。

100Mb=100000000b
转换为字节
:
100000000/8/1024/1024=92(MB)
这里的M是220,B是字节。
11.


5.2 
进位记数制
1.
表示数据时,用多个数位表示,每个数位一个数字,左边的数位高,右边的数位低,当
低位的数字达到某一数字时再加1,则本位计0,高位加1,这种记数的方法就是进位记数
制。目前日常用的十进制就是一种进位记数制。

用进位记数制表示数据,有以下四个要素。

● 数码:一组用来表示数的数字,如十进制的0,1,2,3,…,9这10 个数字。
● 基数:其实就是表示数的数码个数,如十进制的10 。
● 数位:数码在数中的位置。对于整数,一般右边是低位,左边是高位,从右向左,十
进制用个位、十位、百位等表示,其他进制用序号0,1,2,3,…表示。对小数部分, 
从左向右编号为-1,-2,-3,…。
● 权:不同位置上的数字的份量,就是这个数位的1表示的数值。如对于十进制,个
位的权是1,十位的权是10,百位的权是100,序号是
k 
的位上的权是10k 
。
进位记数制的进位规则是“逢
N 
进一,借一当
N 
”。对于十进制,
N 
=10 。
数的表示可以采用不同的数制,计算机科学中常用的有十进制、二进制、八进制和十

六进制。
任何一个以
N 
为基数的记数系统,其数可以表示为以下形式。

-
m 
j

(xn-1,…,x0.---(1)ym 
)N=Σ(1) (n) yjN

x1,y1y2…ym--xiNi+ 
Σ 

其中,
n 
表示整数部分的位数,
m 
表示小数部分的位数,(i) =0 
表示每一
j=位(1) 整数数字,表示

xi 
y-
j 

每一位小数数字,和y-是属于0,1,…,
N 
-1 的数字,Ni 
和
N 
-
j 
就是位权,1,…,n-1,1,…,。注意,x0 的右边是小数点符号。等号左边是
N 
进制数的表示

xij 
i=0, 

j=
m 
形式,右边是这个数对应的十进制数量,所以这个公式也是
N 
进制数转换为十进制数的
公式,这种运算方式称为按权展开。

1. 
十进制
十进制数的数码是0,1,2,3,4,5,6,7,8,9共10 个符号。


151
基数是10 
k 
。
,位权是10k 
是数位的序号。
进位规则是“逢十进一,借一当十”。
当多种数制的数同时使用时,同样的数代表的量可能是不同的,如11,如果是十进

制,它代表的数量就是“十一”,如果是二进制数,它代表的数量是“三”。为了区别不同数
制表示的数,常在数的后面加上后缀,如用D、B、Q、H分别表示十进制、二进制、八进制和
十六进制数,如11B 是二进制数,11Q 是八进制数,AFH 是十六进制数。如果省略,默认
是十进制数,如1011,不写后缀,被认为是十进制数。也常用下标表示,如(11)

10 表示十进
制数,(2 表示二进制数,(16 表示十六进制数等。

11)11)

2. 
二进制
二进制数的数码是0,1共两个符号
。
基数是2 
k 
。
,
位权是2k 
是数位的序号
。
进位规则是“逢二进一,借一当二”
。
例如,(1101.2 按权展开
:


1011)

-

(1101.=1×22+0×20+1×21+

1011)23+1×21+1×20×2-2+1×2-3+1×2-4 

=(13.10 

6875)
习惯上,为了清晰,写二进制数时每4位加一个空格隔开,如100100101111B 。

3. 
八进制
八进制数的数码是0,1,2,3,4,5,6,7共8个符号
。
基数是8
。
位权是8k,k是数位的序号
。
进位规则是“逢八进一,借一当八”
。
例如,(1101.8 按权展开
:


1011)

-

(1101.81×82+0×80+1×81+

1011)=3+1×81+1×80×8-2+1×8-3+1×8-4 

=(577.10 

127197265625)

4. 
十六进制
十六进制数的数码是0~9共10 个数字符号和A~F 共6个字母符号(大小写均可, 

习惯大写), 共16 个符号。A~F 依次分别相当于十进制的10~15 。
基数是16 。
位权是16k 
,

k 
是数位的序号
。
进位规则是“逢十六进一,借一当十六”
。
例如,(2AE.16 按权展开
:


11)


251
--2

(2AE.16=2×161+14×160+1×161+1×16

11)2+10×16=(686.06640625)
表5-1列出了不同进制的数和十进制数(10) 的对应关系。

表5-
1 
不同进制的基本数值的对应关系

进制数值
十进制0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
二进制0 1 10 11 100 101 110 11110001001101010111100110111101111 
八进制0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 
十六
进制0 1 2 3 4 5 6 7 8 9 A B C D E F 

十六进制中的字母符号,大小写均可,通常用大写。

5. 
不同进制数的转换
在不同的场合会用不同进制的数,所以常常需要相互转换。其他进制转十进制的方
法就是前述的按权展开,下面介绍十进制转其他进制。
1)十进制转二进制
十进制转成二进制包括两个部分:十进制整数部分转二进制和十进制小数部分转二

进制。整
数部分,除二取余,直到商为零,对得到的余数按先后依次从右向左排列。
小数部分,乘二取整,直到小数为零,按先后依次从左向右排列得到的整数部分。出

现循环时,可以根据精度需要取若干位的小数即可。
【例5-将十进制数25.

3】3125 转换为二进制数
。
【解】对整数部分,采用“除二取余”的方法
。



将得到的余数依次从右向左排列,得到(25)11001)。
对小数部分,采用“乘二取整”的方法。
10=(2 
0.3125×2=0.

625…………………0 
0.625×2=0.

25 …………………1 
0.25×2=0.

5 ……………………0 
0.=0 ……………………1

5×20.
将得到的整数从左到右依次排列,得到(0.3125)10=(0101)

0.2 
十进制转任意的
N 
进制,均可以采用“除
N 
取余”和“乘
N 
取整”的方法。

2)二进制和八进制相互转换

从表5-1了解到,二进制的000,001,010,011,100,101,110,111 依次分别对应八进
制的0,1,2,3,4,5,6,7共8个数字。也可以说使用三位的不同的0、1序列刚好可以表示
八进制的8个数字符号。所以,一个三位二进制数刚好对应一位八进制数。这就得到了
二进制数转八进制数的方法。

二进制转八进制,整数部分,从右向左每三位一组,不够三位时补0,将每三位二进制
转换为一位八进制数。小数部分,从左向右每三位一组,不够三位时补0,将每三位二进
制转换为一位八进制数。
11001)

【例5-4】将(10011.2 转换为八进制。
【解】按照规则,整数部分,从右向左每三位一组,不够三位时补0;小数部分,从左
向右每三位一组,不够三位时补0。
11001)110010 (10011.2→010011.
将每三位二进制转换为一位八进制数。
010011.62 
所以:(10011.11001)2=(62)。
110010→23.

23.8
注意:不够三位一定要补0,忘掉补0会得到不同的数,结果就会错误
。
【
反过来
5 
,
】
八进制转二进制,将每位八进制数转换为三位的二进制数即可
。
例5-121.8 转换为二进制。

将(61)
【解】按照规则,将每位八进制数转换为三位的二进制数
。
001010001.2


注意:一定要将一位八进制数写成三位二进制数,例如,(8 要写成(2, 得
到的结果就会是错误的。
3)二进制和十六进制
(121.61)8=(110001)
1)001)否则, 

从表5-1还可以了解到,二进制的0000,0001,0010,…,1111 依次分别对应十六进制
的0,1,2,…,E,F共16 个数码。也可以说使用四位的不同的0、1序列刚好可以表示十
六进制的16 个数字符号。所以,一个四位二进制数刚好对应一位十六进制数。这就得到
了二进制数转十六进制数的方法。

二进制转十六进制,整数部分,从右向左每4位一组,不够4位时补0,将每4位二进
制转换为一位十六进制数。小数部分,从左向右每4位一组,不够4位时补0,将每4位
二进制转换为一位十六进制数。

【例56】1转换为十六进制数。

-将二进制数101010001100.
【解】首先进行补位和每4位分隔后得到:101010001100.1000,每4位转换
为一位十六进制数,十六进制结果为A8C.

8H 
。
十六进制转二进制,将每位十六进制数转换为4位二进制数
。
【例5-将十六进制数A2.


7】B3 转换为二进制数。
【解】首先从小数点开始分别向左右查表扩写如下:10100010.10110011,最
后写出紧凑的二进制结果10100010.

10110011B 
。
十进制到八进制、十六进制的转换可以借助于二进制来进行
。



451
6. 
二进制的算术运算
二进制数的算术运算与十进制类似,也有加减乘除四则运算,对于二进制数字0和1 
来说,其算术运算规则如表5-2所示。

表5-
2 
二进制的算术运算规则

加法0+0=0 0+1=1 1+0=1 1+1=10 
乘法0×0=0 0×1=0 1×0=0 1×1=1 
减法0-0=0 0-1=1 1-0=1 1-1=0 
除法0÷1=0 1÷1=1 

知道了二进制算术运算规则之后,就可以进行任意位的二进制整数和实数的算术运

算了
【
。
例5-8】二进制整数的四则运算。计算下式的值(均为二进制,结果也是二进制)。
10101010+00101010=? 
01000000-00001010=? 
1001110×1011101=? 
10111010÷110=? 
【解】
10101010+00101010=11010100 
01000000-00001010=00110110 
1001110×1011101=1110001010110 
10111010÷110=11111 
【例5-9】二进制实数的四则运算。计算下式的值(均为二进制,结果也是二进制)。
0.01010

11001+1.=
?
1.1000011-0101101


0.=
?
0.10011=
?


11011×0.
0.1011


1010÷0.=
?
【解
】
0.11001+1.0101010.


=00011
1.1000011-01011011.


0.=0010110
0.11011×0.100110.


=1001000001
0.1010÷0.10110.


=111… 

5.数的编码
2 

本节主要介绍计算机中整数和实数的表示方法。由于它们在形式上与数学上的表示
方式不相同,而更重要的是一种代号的概念,所以称为编码。编码的含义是用某个符号代


551
表另一个事物。

5.1 
整数的编码
2.
首先介绍几个概念,即字、字长、真值和机器数,然后介绍机器数的编码。

1. 
字与字长
字是指计算机中作为一个整体来处理或运算的一串数码。这串数码的长度称为字
长。如现在说的64 位计算机或64 位操作系统,它们一次可以处理64 位的二进制数据, 
64 位是一个字,64 就是字长。

2. 
机器数和真值
前面讨论的数未涉及符号,称为无符号数。实际中的数有正有负,带有正负号的数称
为有符号数或带符号数。数学中的正负号用“+”“-”表示,而计算机中所有的信息都要
转换为0、1序列。通常规定,用0表示正号,1表示负号,放在一个数的最高位。例如,设
机器的字长为8位,则第7位(即最高位)为符号位,(00001001)2 表示+9,(10000101)

2 

表示-5。
符号被数值化了的(二进制)数称为机器数。而把原来带“+”“-”号的数称为真值, 
如(+0001001)-0000101)。

2,(

2 

3. 
机器数的编码
一个数可以使用不同的形式表示,计算机中的数有原码、反码和补码三种形式。
1)原码
原码就是机器数,即真值的绝对值加上符号位,即用最高位表示符号,其余位表示值。

例如,对于字长为8位的机器来讲,+1 的原码为00000001,-1 的原码为10000001, 
记为

[+1]原=00000001,[-1]原=10000001 

+0 的原码为00000000,-0的原码为10000000,说明0的原码不唯一。

对于8位字长,由于最高位即第7位为符号位,所以8位二进制机器数的取值范围为
11111111~01111111,即十进制-127~+127 。

2)反码

规定反码的表示方法为:正数的反码是其原码;负数的反码是在其原码的基础上,保

持符号位不变,其余数据位的各个位取反,即0变为1,1变为0。例如,字长8位,+1 和

-1的原码为00000001 和10000001,其反码分别为00000001 和11111110 。记为

[+1]反=00000001,[-1]反=11111110 

+0 的反码为00000000,-0的反码为11111111,说明0的反码不唯一。

3)补码

规定补码的表示方法为:正数的补码和其原码相同,负数的补码是在其反码的基础
上加1。例如,字长为8位,+1 和-1的反码分别为00000001 和11111110,其补码分别


为00000001 和11111111,记为

[+1]补=00000001,[-1]补=11111111 

计算机中采用补码的优点是,可以将加法、减法运算统一简化为加法运算。例如:对
于式子5-5=0,可以改写为(5)+(-5)=(0), 而5的补码为00000101,-5的补码为
11111011,这里假定机器字长为8位。由于00000101+11111011=100000000,去掉
溢出的第8位,00000000 正好为0的补码。

再如对于式子3-5=-2,可以改写为(3)+(-5)=(-2), 而3的补码为0000 
0011,-5的补码为11111011,这里假定机器字长为8位。由于00000011+11111011= 
11111110,11111110 正好为-2的补码。

事实上,计算机中的整数是用补码表示的,而运算也是补码运算,将减法转为加法。

4)特殊数补码

假定字长为8位。

0有+0 和-0,+0 的原码、反码和补码均为00000000;-0的原码、反码和补码分别

为10000000 、111111111 、100000000,去掉溢出最高位第8位1,得到-0的补码也为
00000000 。这样0的补码是唯一的。
+127 的原码、反码和补码均为01111111;-127 的原码、反码和补码分别为1111 
1111 、10000000 和10000001 。
由于补码10000000 未被占用,所以规定它代表-128 的补码形式,而-128 没有原
码和反码。8位补码的表示范围是-128~127 。
对于
n 
位二进制数,原码的表示范围为-(n-1-1)n-1-1), 补码的表示范围
为-2n-1~+(2n-1-1)。补码可以定义为
2~+(2

X 
0≤
X 
<2n-1 

[X]补
= 
2n 
+
X 
=2n 
-|X| 
-2n-1≤
X 
<0 
5)补码的简便计算

设字长为
n 
位,则正数的补码是其原码,0的补码是
n 
个0,-1的补码是
n 
个1,2n-1的补码是1后面n-1个0,其他负数的补码:先写出其原码,然后从右向左的连续0 
和第一个1不变,再向左按位取反,符号位不变。如8位字长,-28-1=-128 的补码是
10000000,[-52]原=10110100,[-52]补=11001100 。

4. 
溢出问题
由于计算机表示数据时用的二进制位是有限的,例如8位,那么它能表示的数的范围
就是有限的。8位补码能表示的数的范围是-128~127 。这样两个同符号的数相加时就
可能超出8位二进制能表示的范围,例如127+1=128,这种现象称为溢出。大于能表示
的最大正数称为上溢,小于能表示的最小负数称为下溢。

如何判断溢出呢? 方法是:异号相加不会溢出;同号相加,最高位变号则溢出,最高
位不变号则不溢出,而不管是否向D8 进位。因为异号相加,结果的绝对值小于两数的绝
对值,一定在能表示的范围内;而两正数相加应该为正数,两负数相加应该为负数,如果符


号位改变,说明结果是不正确的,本质上是产生了溢出。

例如,补码运算10000001+01001101=11001110,异号相加,不溢出。01000000+ 
01000000=10000000 两个正数相加,符号位改变(结果为负数), 溢出。11000000+ 
11000000=(1)10000000,两个负数相加,符号位没变,不溢出,尽管有向D8 位进1(括号
中的1), 这个1会被自然舍去,而8位的最高位没变。

注意:D8 表示整数部分序号是8的数位。
【例5-10 
】若计算机采用8位二进制,判断下列计算是否会溢出,说明原因。
①(-32)10+(-32)

10 

②(-119)10+(-63)

10 

③(-10+(10 

63)74)
④(67)62)


10+
(
⑤(79)35)(10) 

10+(10
10+
(


⑥(-63)-63)
【解】(本例未标几进制(10) 的是二进制补码形式)11100000 代表-32 的补码,其最高位
为1,计算(-32)-10==出现进位,舍掉进

10+(32)11100000+11100000111000000, 
位得到11000000=-(64)10,这是假溢出,新的最高位仍为1,计算结果正确。
(-119)10+(-63)10=10001001+11000001=101001010,舍去掉D8 的进位得到
01001010=(+74)符号位改变,溢出。

10,

(-63)
10,74)11000001+01001010=100001011,舍掉D8 的进位得到0000 

10+(10=
1011=(+11)不溢出。
(67)10+(10===(127)无进位,

62)01000011+0011111010000001-10, 但符号位
改变(-127)10,溢出。
(79)10+(10===(+114)无进位,符号位不
变,不是溢出。
35)01001111+001000110111001010, 
(-63)-10==去掉进位得到10000010=

10+(63)11000001+11000001110000010,
(-126)符号位不变,不是溢出。

10, 

2.浮点数的编码
5.2 
数学中的实数包含整数、有限位小数、无限循环小数和无限不循环小数,计算机中的
实数一般有两种表示形式,即定点数和浮点数。

1. 
定点数和浮点数
定点数将小数点始终固定于实数全部数字中间的某个位置上。例如,货币值一般采
用的就是这种定点方式,假如共有4位精确度, 如87.

小数点固定在第二位数之后, 60 或
者03.

52 。

定点数表示形式尽管简单,但其缺点在于形式过于死板,当小数点位置固定下来后, 
也就决定了整数部分和小数部分都具有固定位数,一旦遇到特别大或者特别小的数时就
不胜任了。浮点数表示数据更灵活,可以有更大的表示范围,它利用科学记数法来表示实