大学计算机基础教程
上QQ阅读APP看书,第一时间看更新

【项目1.2】 计算机中的信息表示

1.2.1 进位计数制

数制也称计数制,是一种用一组固定的数字和统一的规则来表示数值的方法。

按照进位方式计数的数制叫进位计数制。十进制即逢十进一,生活中也常常遇到其他进制,如六十进制(每分钟60秒、每小时60分钟,即逢60进1)、十二进制、十六进制等。

任何进制都有它生存的原因。人类的屈指计数沿袭至今,由于日常生活中大都采用十进制计数,因此我们对十进制最习惯;另外,如十二进制,十二的可分解的因子多(12,6,4,3,2,1),如商业中会用到的包装计量单位“一打”;还有十六进制,十六可被平分的次数较多(16,8,4,2,1),即使在现代,某些情况下(如中药、金器的计量单位)还在沿用这种计数方法。任何进位数制,都有以下四个要素。

基数:十进制的基数是10,二进制的基数是2,r进制(任意进制)的基数是r

数码:十进制的数码为0,1,2,…,9;二进制的数码为0,1等。

进位原则:如十进制逢十进一,二进制逢二进一等。

位权:即每一位数位上数码所具有的权,十进制数的位权为10i,二进制的位权为2i等,其中i取值为整数。

任意一个R进制数N,都可以按如下公式表示:

其中:

R为基数,表示为R进制数,逢R进1,该进位数制中允许选用R个基本数码的个数。

n为整数部分的位数。

m为小数部分的位数。

Ri为第i位的位权。

Ki为第i位的数码,为0、1、2、…、R-1中的一个。

1.2.2 二进制代码和二进制数码

1.二进制的特点

在计算机中为什么要采用二进制?原因如下。

(1)可行性

采用二进制,只有0和1两个状态,需要表示0、1两种状态的电子器件很多,如开关的接通和断开,晶体管的导通和截止、磁元件的正负剩磁、电位电平的低与高等都可表示0、1两个数码。使用二进制,电子器件具有实现的可行性。

(2)简易性

二进制数的运算法则少,运算简单,使计算机运算器的硬件结构大大简化。

(3)逻辑性

由于二进制0和1正好和逻辑代数的假(false)和真(true)相对应,有逻辑代数的理论基础,用二进制表示二值逻辑很自然。

2.二进制代码和二进制数码

我们从二进制代码和二进制数码开始介绍计算机基础知识,是因为二进制代码和二进制数码是计算机信息表示和信息处理的基础。

代码是事先约定好的信息表示的形式。二进制代码是把0和1两个符号按不同顺序排列起来的一串符号。

二进制数码有两个基本特征:

用0、1两个不同的符号组成的符号串表示数量;

相邻两个符号之间遵循“逢2进1”的原则,即左边的一位所代表的数目是右边紧邻同一符号所代表的数目的2倍。

二进制代码和二进制数码是既有联系又有区别的两个概念:凡是用0和1两种符号表示信息的代码统称为二进制代码(或二值代码);用0和1两种符号表示数量并且整个符号串各位均符合“逢2进1”原则的二进制代码,称为二进制数码。

目前的计算机在内部几乎毫无例外地使用二进制代码或二进制数码来表示信息,是由于以二进制代码为基础设计、制造计算机,可以做到速度快、元件少,既经济又可靠。虽然计算机在使用者的角度看来处理的是十进制数,但在计算机内部仍然是以二进制数码为操作对象的,所以理解它的内部形式是必要的。

在计算机中数据的最小单位是1位二进制代码,简称为位(bit)。8个连续的bit称为一个字节(byte)。

3.数的二进制表示和二进制运算

(1)数的二进制表示

客观世界中,事物的数量是一个客观存在,但表示的方法可以多种多样。

例1-1 345用十进制数码可以表示为(345)10=3×102十4×101十5×100

用二进制数码可以表示为(101011001)2=1×28+0×27+1×26+0×25+1×24+1×23+0×22+0×21+1×20=256+0+64+0+16+8+0+0+ 1=(345)10

二进制计数中个位上的计数单位也是1,即20=1,个位向左依次为21,22,23,…;向右依次为2−1,2−2,…。

(2)计算机中的算术运算

二进制数的算术运算与十进制的算术运算类似,但其运算规则更为简单,其规则见表1.1。

表1.1 二进制数的运算规则

二进制数的加法运算

例1-2 二进制数1001与1011相加

算式:

结果:(1001)2+(1011)2=(10100)2

由算式可以看出,两个二进制数相加时,每一位最多有3个数(本位被加数、加数和来自低位的进位)相加,按二进制数的加法运算法则得到本位相加的和及向高位的进位。

二进制数的减法运算

例1-3 二进制数11000001与00101101相减

算式

结果:(11000001)2– (11000001)2=(10010100)2

由算式可以看出,两个二进制数相减时,每一位最多有3个数(本位被减数、减数和向高位的借位)相减,按二进制数的减法运算法则得到本位相减的差数和向高位的借位。

(3)计算机中的逻辑运算

计算机中的逻辑关系是一种二值逻辑,逻辑运算的结果只有“真”或“假”两个值。二值逻辑很容易用二进制的“0”和“1”来表示,一般用“1”表示真,用“0”表示假。逻辑值的每一位表示一个逻辑值,逻辑运算是按对应位进行的,每位之间相互独立,不存在进位和借位关系,运算结果也是逻辑值。

逻辑运算有“或”“与”和“非”三种,其他复杂的逻辑关系都可以由这三个基本逻辑关系组合而成。

逻辑“或”:用于表示逻辑“或”关系的运算,“或”运算符可用OR,+,∪或∨表示。

逻辑“或”的运算规则如下:

0+0=0     0+1=1   1+0=1    1+1=1

即两个逻辑位进行“或”运算,只要有一个为“真”,逻辑运算的结果即为“真”,请参见表1.2。

例1-4 如果A=1001111,B=(1011101);求 A+B

步骤如下:

结果:A+B=1001111+1011101=1011111

逻辑“与”:用于表示逻辑与关系的运算,称为“与”运算,与运算符可用AND,·,×,∩或∧表示。

逻辑“与”的运算规则如下:

0×0=0     0×1=0     1×0=0     1×1=1

即两个逻辑位进行“与”运算,只要有一个为“假”,逻辑运算的结果即为“假”,请参见表1.3。

例1-5 如果A=1001111,B=(1011101),求A×B

步骤如下:

结果:A·B=1001111×101101=1001101

表1.2 “或”运算规则

表1.3 “与”运算规则

逻辑“非”:用于表示逻辑非关系的运算,该运算常在逻辑变量上加一横线表示。

逻辑“非”的运算规则:=0,=1即对逻辑位求反,请参见表1.4。

表1.4 “非”运算规则

1.2.3 不同数制间的转换

假设将十进制数转换为R进制数:整数部分和小数部分须分别遵守不同的转换规则。

对整数部分:除以R取余法,即整数部分不断除以R取余数,直到商为0为止,最先得到的余数为最低位,最后得到的余数为最高位。

对小数部分:乘R取整法,即小数部分不断乘以R取整数,直到小数为0或达到有效精度为止,最先得到的整数为最高位(最靠近小数点),最后得到的整数为最低位。

1.十进制数转换为二进制数

十进制数转换成二进制数,基数为2,故对整数部分,除2取余,对小数部分乘2取整。为了将一个既有整数部分又有小数部分的十进制数转换成二进制数,可以将其整数部分和小数部分分别转换,然后再组合。

例1-6 将十进制数(35.25)10转换成二进制数

注意:第一次得到的余数是二进制数的最低位,最后一次得到的余数是二进制数的最高位。也可用如下方式计算。

注意

一个十进制小数不一定能完全准确地转换成二进制小数,这时可以根据精度要求只转换到小数点后某一位为止即可。将其整数部分和小数部分分别转换,然后组合起来得(35.25)10=(100011.01)2

2.十进制数转换为八进制数

八进制数的基本特征是:用8个不同符号0,1,2,3,4,5,6,7组成的符号串表示数量,相邻两个符号之间遵循“逢8进1”原则,也就是说各位上的位权是基数8的若干次幂。

例1-7 将十进制数(1725.32)10转换成八进制数(转换结果取3位小数)。

十进制数转换数成八进制数,基数为8,故对整数部分,除8取余,对小数部分乘8取整。为了将一个既有整数部分又有小数部分的十进制数转换成八进制数,可以将其整数部分和小数部分分别转换,然后再组合。

得(1725.32)10=(3275.243)8

3.十进制数转换为十六进制数

十六进制数的基本特征是:用16个不同符号0~9和A、B、C、D、E、F组成的符号串表示数量,相邻两个符号之间遵循“逢16进1”的原则,也就是各位上的位权是基数16的若干次幂。

用基数乘除法,此处基为16。将十进制整数转换成十六进制整数可以采用“除16取余”法;将十进制小数转换成十六进制小数可以采用“乘16取整”法。如果十进制数既含有整数部分又含有小数部分则应分别转换后再组合起来。

例1-8 将十进制数(237.45)10转换成十六进制数(取3位小数)

整数部分:

小数部分:

得(237.45)10=(ED.733)16

4.二进制数转换为八进制数、十六进制数

8和16都是2的整数次幂,即8=23,16=24,因此3位二进制数相当于l位八进制数,4位二进制数相当于 l 位十六进制数(见表1.5),它们之间的转换关系也相当简单。由于二进制数表示数值的位数较长,因此常需用八进制数、十六进制数来表示二进制数。

表1.5 二进制数、八进制数、十六进制数的对应关系表

将二进制数以小数点为中心分别向两边分组,转换成八(或十六)进制数每3(或4)位为一组,整数部分向左分组,不足位数左边加0补足。小数部分向右分组,不足部分右边加0补足,然后将每组二进制数转化成八(或十六)进制数即可。

例1-9 将二进制数(11101110.00101011)2转换成八进制数、十六进制数

5.八、十六进制数转换为二进制数

将每位八(或十六)进制数展开为3(或4)位二进制数。

例 1-10

整数前的高位零和小数后的低位零可取消。

各种进制转换中,最为重要的是二进制与十进制之间的转换计算,以及八进制、十六进制与二进制的直接对应转换。

1.2.4 计算机中的数据及编码

1.数据的形式

数据有两种形式。一种是形态为人类可读形式的数据,简称人读数据。因为数据首先是由人类进行收集、整理、组织和使用的,这就形成了人类独有的语言、文字以及图像。例如图书资料、音像制品等,都是特定的人群才能理解的数据。

另一种形式称为机器可读形式的数据,简称机读数据。如印刷在物品上的条形码,录制在磁带、磁盘、光盘上的数码,穿在纸带和卡片上的各种孔等,都是通过特制的输入设备将这些信息传输给计算机处理,它们都属于机器可读数据。显然,机器可读数据使用了二进制数据的形式。

2.数据的单位

计算机中数据的常用单位有位、字节和字。

(1)位(Bit)

计算机采用二进制,运算器运算的是二进制数,控制器发出的各种指令也表示成二进制数,存储器中存放的数据和程序也是二进制数,在网络上进行数据通信时发送和接收的还是二进制数。显然,在计算机内部到处都是由0和1组成的数据流。

计算机中最小的数据单位是二进制的一个数位,简称为位(bit,比特)。计算机中最直接、最基本的操作就是对二进制位的操作。

(2)字节(Byte)

字节简写为 B,为了表示人读数据中的所有字符(字母、数字以及各种专用符号,大约有128~256个),需要7位或8位二进制数。因此,人们采用8位为1个字节,1个字节由8个二进制数位组成。

字节是计算机中用来表示存储空间大小的基本容量单位。例如,计算机内存的存储容量,磁盘的存储容量等都是以字节为单位表示的。除用字节为单位表示存储容量外,还可以用千字节(KB)、兆字节(MB)以及十亿字节(GB)等表示存储容量。它们之间存在下列换算关系:

1B=8bit

1KB=1024B=210B         1KB=1024字节,“K”的意思是“千”

1MB=1024KB=210KB=220B=1024×1024B 1MB=1024KB字节,“M”读“兆”。

1GB=1024MB=210MB=230B=1024×1024KB 1GB=1024MB字节,“G”读“吉“。

1TB=1024GB=210GB=240B=1024×1024MB 1TB=1024GB字节,“T”读“太”。

要注意位与字节的区别:位是计算机中最小的数据单位,字节是计算机中基本的信息单位。

(3)字(word)

在计算机中作为一个整体被存取、传送、处理的二进制数字符串叫作一个字或单元,每个字中二进制位数的长度,称为字长。一个字由若干个字节组成,不同的计算机系统的字长是不同的,常见的有8位、16位、32位、64位等,字长越大,计算机一次处理的信息位就越多,精度就越高,字长是计算机性能的一个重要指标。目前主流计算机都是32位机。

注意字与字长的区别,字是单位,而字长是指标,指标需要用单位去衡量。正如生活中重量与公斤的关系,公斤是单位,重量是指标,重量需要用公斤加以衡量。

3.常用的数据编码

信息包含在数据里面,数据要以规定好的二进制形式表示才能被计算机加以处理,这些规定的形式就是数据的编码。数据的类型有很多,数字和文字是最简单的类型,表格、声音、图形和图像则是复杂的类型,编码时要考虑数据的特性和便于计算机存储和处理,所以也是一件非常重要的工作。下面介绍几种常用的数据编码。

(1)BCD码

因为二进制数不直观,于是在计算机的输入和输出时通常还是用十进制数。但是计算机只能使用二进制编码,所以另外规定了一种用二进制编码表示十进制数的方式,即每1位十进制数字对应4位二进制编码,称二进制编码的十进制数(Binary Coded Decimal,BCD码),又称8421码。表1.6是十进制数0到9与BCD码的对应关系。

表1.6 BCD编码表

(2)ASCII编码

字符是计算机中最多的信息形式之一,是人与计算机进行通信、交互的重要媒介。在计算机中,要为每个字符指定一个确定的编码,作为识别与使用这些字符的依据。

各种字母和符号也必须按规定好的二进制码表示,计算机才能处理。在西文领域,目前普遍采用的是美国标准信息交换码(American Standard Code for Information Interchange,ASCII码),ASCII 码虽然是美国国家标准,但它已被国际标准化组织(ISO)认定为国际标准,并在世界范围内通用。

标准的ASCII码是7位码,用一个字节表示,最高位总是0,可以表示128个字符,如表1.7所示。前32个码和最后一个码通常是计算机系统专用的,代表一个不可见的控制字符。数字字符0到9的ASCII码是连续的,从30H到39H(H表示是十六进制数);大写字母A到Z和小写英文字母a到z的ASCII码也是连续的,分别从41H到54H和从61H到74H。因此在知道一个字母或数字的编码后,很容易推算出其他字母和数字的编码。

例如:大写字母A,其ASCII码为1000001,即ASC(A)=65

小写字母a,其ASCII码为1100001,即ASC(a)=97

扩展的ASCII码是8位码,也是一个字节表示,其前128个码与标准的ASCII码是一样的,后128个码(最高位为1)则有不同的标准,并且与汉字的编码有冲突。为了查阅方便,表1.7中列出了ASCII码字符编码。

(3)汉字编码

计算机处理汉字信息时,由于汉字具有特殊性,因此汉字的输入、存储、处理及输出过程中所使用的汉字代码不相同,分为用于汉字输入的输入码、用于机内存储和处理的机内码、用于输出显示和打印的字模点阵码(或称字形码)。

表1.7 7位ASCII 码表

①《信息交换用汉字编码字符集·基本集》

《信息交换用汉字编码字符集·基本集》是我国于1980年制定的国家标准GB2312-80,代号为国标码,是国家规定用于汉字信息处理使用的代码的依据。

GB2312-80中规定了信息交换用的6763个汉字和682个非汉字图形符号(包括几种外文字母、数字和符号)的代码。

6763个汉字又按其使用频度、组词能力以及用途大小分成一级常用汉字3755个,二级常用汉字3008个。

在此标准中,每个汉字(图形符号)采用2个字节表示,每个字节只用低7位。由于低7位中有34种状态是用于控制字符,因此,只用94(128-34=94)种状态可用于汉字编码。这样,双字节的低7位只能表示94×94=8836种状态。

此标准的汉字编码表有94行、94列。其行号称为区号,列号称为位号。双字节中,用高字节表示区号,低字节表示位号。非汉字图形符号置于第1~11区;一级汉字3755个,置于第16~55区;二级汉字3008个,置于第56~87区。

② 汉字的机内码

汉字的机内码是供计算机系统内部进行存储、加工处理、传输统一使用的代码,又称为汉字内部码或汉字内码。不同系统使用的汉字机内码有可能不同。目前使用最广泛的一种为两个字节的机内码,俗称变形的国标码。这种格式的机内码是将国标GB2312-80交换码的两个字节的最高位分别置为1而得到的。其最大优点是机内码表示简单,且与交换码之间有明显的对应关系,同时也解决了中西文机内码存在二义性的问题。例如,“中”的国标码为十六进制5650 (01010110 01010000),其对应的机内码为十六进制D6D0(11010110 11010000),同样,“国”字的国标码为397A,其对应的机内码为B9FA。

③ 汉字的输入码(外码)

汉字输入码是为了利用现有的计算机键盘,将形态各异的汉字输入计算机而编制的代码。目前在我国推出的汉字输入编码方案很多,其表示形式大多为字母、数字或符号。编码方案大致可以分为以汉字发音进行编码的音码,例如全拼码、简拼码、双拼码等;按汉字书写的形式进行编码的形码,例如五笔字型码是;也有音形结合的编码,例如自然码。

④ 汉字的字形码

汉字字形码是汉字字库中存储的汉字字形的数字化信息,用于汉字的显示和打印。目前汉字字形的产生方式大多是数字式,即以点阵方式形成汉字,因此,汉字字形码主要是指汉字字形点阵的代码。

汉字字形点阵有16×16点阵、24×24点阵、32×32点阵、64×64点阵、96×96点阵、128×128点阵、256×256点阵等。一个汉字方块中行数、列数分得越多,描绘的汉字也就越细微,但占用的存储空间也就越多。汉字字形点阵中每个点的信息要用一位二进制码来表示。对16×16点阵的字表码,需要用32个字节(16×16÷8=32)表示;24×24点阵的字形码需要用72个字节(24×24÷8=72)表示。

汉字字库是汉字字形数字化后,以二进制文件形式存储在存储器中而形成的汉字字模库。汉字字模库亦称汉字字形库,简称汉字字库。

注意

国标码用2个字节表示1个汉字,每个字节只用后7位。计算机处理汉字时,不能直接使用国标码,而要将最高位设置成1,变换成汉字机内码,其原因是为了区别汉字码和ASCII码,当最高位是0时,表示为ASCII码,当最高位是1时,表示为汉字码。

4.计算机中数的表示

(1)计算机中数据的表示

计算机只能用数字化信息来表示数的正、负,人们规定用“0”表示正号,用“1”表示负号。例如,在机器中用8位二进制表示一个数“+90”,其格式为

而用8位二进制表示一个数“−89”,其格式为

在计算机数字和符号都用二进制码表示,两者合在一起构成数的机内表示形式,称为机器数,而它真正表示的数值被称为这个机器数的真值。

(2)定点数和浮点数

① 机器数表示的数的范围受设备限制

计算机一般用若干个二进制位表示一个数或一条指令,把它们作为一个整体来处理、存储和传送。这种作为一个整体来处理的二进制位串,称为计算机字。表示数据的字称为数据字,表示指令的字称为指令字。

计算机是以字为单位进行处理、存储和传送的,所以运算器中的加法器、累加器以及其他一些寄存器,都选择与字长相同位数。字长一定,则计算机数据字所能表示的数的范围也就确定了。

例如,使用8位字长计算机,它可表示无符号整数的最大值是(255)10=(11111111)2。运算时,若数值超出机器数所能表示的范围,就会停止运算和处理,这种现象称为溢出。

② 定点数与浮点数

计算机中运算的数,有整数,也有小数,如何确定小数点的位置呢?通常有两种约定:一种是规定小数点的位置固定不变,这时机器数称为定点数;另一种是小数点的位置可以浮动的,这时的机器数称为浮点数。微型机多选用定点数。

数的定点表示是指数据字中小数点的位置是固定不变的。小数点位置可以固定在符号位之后,这时,数据字就表示一个纯小数。假定机器字长为16位,符号位占1位,数值部分占15位,故下面机器数等效的十进制数为−2−15

如果把小数点位置固定在数据字的最后,这时,数据字就表示一个纯整数。假设机器字长为16位,符号占一位,数值部分占15位,故下面机器数等效的十进制数为+32767。

定点表示法所能表示的数值范围很有限,为了扩大定点数的表示范围,可以通过编程技术,采用多个字节来表示一个定点数,例如,采用4个字节或8个字节等。

③ 浮点数

浮点表示法就是小数点在数中的位置是浮动的。在以数值计算为主要任务的计算机中,由于定点表示法所能表示的数的范围太窄,不能满足计算问题的需要,因此就要采用浮点表示法。在同样字长的情况下,浮点表示法能表示的数的范围扩大了。

计算机中的浮点表示法包括两个部分:一部分是阶码(表示指数,记作E);另一部分是尾数(表示有效数字,记作M)。设任意一数N可以表示为N=2EM,其中2为基数,E为阶码, M为尾数。浮点数在机器中的表示方法如下:

由尾数部分隐含的小数点位置可知,尾数总是小于1的数字,它给出该浮点数的有效数字。尾数部分的符号位确定该浮点数的正负。阶码给出的总是整数,它确定小数点浮动的位数,若阶符为正,则向右移动;若阶符为负,则向左移动。

假设机器字长为32位,阶码8位,尾数24位,则表示如下:

其中左边1位表示阶码的符号,符号位后的7位表示阶码的大小。后24位中,有一位表示尾数的符号,其余23位表示尾数的大小。浮点数表示法对尾数有如下规定:1/2≤M<1,即要求尾数中第1位数不为零,这样的浮点数称为规格化数。

当浮点数的尾数为零或者阶码为最小值时,机器通常规定,把该数看作零,称为“机器零”在浮点数表示和运算中,当一个数的阶码大于机器所能表示的最大码时,产生“上溢”。上溢时机器一般不再继续运算而转入“溢出”处理。当一个数的阶码小于机器所能代表的最小阶码时产生“下溢”,下溢时一般当作机器零来处理。