1.2 数据表示与存储
1.2.1 计算机中的数据
ENIAC是一台十进制计算机,采用十个真空管来表示一位十进制数。但是,这种十进制表示法在使用过程中存在繁琐问题,继而由冯·诺依曼提出了二进制的表示法。
二进制只有“0”和“1”两个取值。相对十进制而言,采用二进制表示法不但运算简单、便于实现,更重要的是所占用的空间和所消耗的能量小、机器性能高。
计算机内部均采用二进制来表示各种信息。凡涉及十进制和二进制间的转换问题,则由计算机系统的硬件和软件协调实现。
1.2.2 计算机中的数据单位
计算机中数据的最小单位是位,存储容量的基本单位是字节。其中:8个二进制位构成1个字节。
1.位
位是度量数据的最小单位,单位为Bit。在采用二进制表示法的电路中,代码只有“0”和“1”两个取值,被称为“数码”,即“位”。
2.字节
8位二进制构成一个字节,单位为Byte。字节是信息组织和存储的基本单位,也是计算机体系结构的基本单位。
3.字长
人们将计算机一次能够并行处理的二进制位称为机器的字长。字长是计算机的一个重要的性能指标,直接反映一台计算机的计算能力和计算精度。字长越长,计算机的数据处理速度越快。
4.其他
计算机中其他的数据单位还有:千字节(KB)、兆字节(MB)、吉字节(GB)、太字节(TB)等。其换算关系如下:
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
1.2.3 数制与编码
1.数制
数制又称计数制,是用一组固定的符号和统一的规则来表示数值的方法。人们通常采用的数制有十进制、二进制、八进制和十六进制。
2.进位计数制
常用的数制都采用了进位计数制,简称进位制,是按进位方式实现计数的一种规则。进位计数制涉及数码、基数和位权这3个概念。
● 数码:一组用来表示某种数制的符号;
● 基数:数制所使用的数码个数;
● 位权:数码在不同位置上的倍率值,对于N进制数,整数部分第i位的位权为N i,而小数部分第j位的位权为N-j。
常用的数制表示如下:
● 十进制(D):有10个基数,为0~9,逢十进一;
● 二进制(B):有2个基数,为0和1,逢二进一;
● 八进制(O):有8个基数,为0~7,逢八进一;
● 十六进制(H):有16个基数,分别为0~9与A~F,逢十六进一。
3.常用数制的书写形式
在书写时,为了区别不同的数制,可采用以下两种方法表示。
● 用一个下标来表示。
例1:(10)10(10)2(10)16
十进制二进制十六进制
● 用数值后面加上特定的字母来区分。
例2:10D10B10H
十进制二进制十六进制
其中,在表示十进制时,D可以省略。
4.进制转换
● 其他进制转换为十进制
方法是:先将其他进制按权位展开,然后把各项相加,就得到了相应的十进制数。
例3:N=(10110.101)B=(?)D
按权展开:N=1×24+0×23+1×22+1×21+0×20+1×2-1+0×2-2+1×2-3 = 16+4+2+0.5+0.125 =(22.625)D
● 将十进制转换成其他进制
● 方法是:分两部分进行,即将整数部分和小数部分分别进行转换,然后将转换后的数组合在一起。
● 整数部分:(辗转相除法)
a.把要转换的数除以目标进制的基数,把余数作为目标进制的最低位;
b.把上一次得的商再除以目标进制的基数,把余数作为目标进制的次低位;
c.继续上一步,直到最后的商为零,这时的余数就是目标进制的最高位。
例4:789=(1100010101)B
小数部分:(辗转相乘法)
a.把要转换数的小数部分乘以目标进制的基数,把得到的整数部分作为目标进制小数部分的最高位;
b.把上一步得的小数部分再乘以目标进制的基数,把整数部分作为目标进制小数部分的次高位;
c.继续上一步,直到小数部分变成零或达到预定的要求为止。
例5:0.625=(0.101)B
0.625∗2=1.25======取出整数部分1
0.25∗2=0.5========取出整数部分0
0.5∗2=1==========取出整数部分1
● 二进制与八进制、十六进制的相互转换
二进制转换为八进制、十六进制:它们之间满足23和24的关系,因此把要转换的二进制从低位到高位每3位或4位一组,高位不足时在有效位前面添0,然后把每组二进制数转换成八进制或十六进制即可。
八进制、十六进制转换为二进制时,把上面的过程逆过来即可。
例6:N=(C1B)H=(?)B
十六进制:C1B
二进制数:110000011011
5.计算机中字符的编码
● 西文字符的编码
微型机采用ASCII码。ASCII码是美国标准信息交换码,被国际标准化组织(ISO)指定为国际标准,ASCII码有7位码和8位码两种版本。国际通用的7位ASCII码称为ISO 646标准,用7位二进制数b6b5b4b3b2b1b0表示一个字符的编码,其编码范围为0000000B—1111111B,共有27=128个不同的编码值。扩展的ASCII码使用8位二进制位表示一个字符的编码,可表示28=256个不同字符的编码。
● 汉字的编码
a.汉字信息交换码(国标码)
汉字交换码是指不同的具有汉字处理功能的计算机系统之间在交换汉字信息时所使用的代码标准。自国家标准GB2312 80公布以来,我国一直沿用该标准所规定的国标码作为统一的汉字信息交换码。GB2312 80标准包括了6763个汉字,按其使用频度分为一级汉字3755个和二级汉字3008个。一级汉字按拼音排序,二级汉字按部首排序。此外,该标准还包括标点符号、数种西文字母、图形、数码等符号682个。
区位码的区码和位码均采用从01到94的十进制。国标码采用十六进制的21H到73H(数字后加H表示其为十六进制数)。区位码和国标码的换算关系是:区位码中的区码和位码分别加上十进制数32就是国标码。如“国”字在表中的25行90列,其区位码为2590,国标码是397AH。
b.汉字输入码
为将汉字输入计算机而编制的代码称为汉字输入码,又称外码。目前汉字主要是经标准键盘输入计算机的,所以汉字输入码都是由键盘上的字符或数字组合而成的。
c.汉字内码
汉字内码是为在计算机内部对汉字进行存储、处理和传输的汉字代码,它应能满足存储、处理和传输的要求。当一个汉字输入计算机后就被转换为内码,然后才能在机器内传输、处理。汉字内码的形式是多种多样的。
d.汉字字形码
输出汉字时,根据内码在字库中查到其字形描述信息,然后显示和打印输出。描述汉字字形的方法主要有点阵字形和轮廓字形两种。汉字字形通常分为通用型和精密型。通用型汉字字形点阵分成3种:简易型16×16点阵;普通型24×24点阵;提高型32×32点阵。精密型汉字字形用于常规的印刷排版,通常采用信息压缩存储技术。汉字的点阵字形的缺点是放大后会出现锯齿现象,很不美观。
e.汉字地址码
汉字地址码是指汉字库中存储汉字字形信息的逻辑地址码。
f.各种汉字代码之间的关系
汉字的输入、处理和输出的过程,实际上是汉字的各种代码之间的转换过程,或者是说汉字代码在系统有关部件之间流动的过程。汉字输入码向内码的转换,是通过使用输入字典实现的。
g.汉字字符集简介
● GB2312 80汉字编码:GB2312码是中华人民共和国国家标准汉字信息交换用编码,习惯上称为国际码、GB码或区位码。它是一个简化字汉字的编码。
● GBK编码:GBK也是一个汉字编码标准。GBK向下与GB2312 80编码兼容,向上支持ISO 10646.1标准。
● GB180302000汉字编码:GB180302000编码标准是在原GB2312 80编码标准和GBK编码标准基础上扩展而成的。GB180302000支持全部CJK统一汉字字符。
● BIG 5码:通行于中国台湾、香港地区的一个繁体字编码方案,俗称“大五码”,广泛应用于计算机业和因特网。
6.整数的编码表示
数值型信息类型有整数和实数。
机器数是在计算机内部,表示整数和实数的二进制编码。机器数的位数(字长)由CPU的硬件决定,通常是2K(N)位。例如:8位、16位、32位、64位、128位、256位。Pentium处理器的机器数:32位/64位,但也有例外,如14位、40位等。
整数的编码表示一般不使用小数点,或者认为小数点固定隐含在个位数的右面。整数是“定点数”的特例。整数有时也混称“定点数”。
整数又分为无符号的整数和带符号的整数两类。无符号的整数(Unsigned Integer)是正整数。如字符编码、地址、索引等。带符号的整数(Signed Integer)是正整数或负整数。如描述一些有正有负的数值。
● 无符号整数的编码表示
无符号整数的编码表示方法是用一个机器数表示一个不带符号的整数。其取值范围由机器数的位数决定。
a.8位:可表示0~255(28-1)范围内的所有正整数。最小值是00000000B,最大值是11111111B。
b.16位:可表示0~65535(216-1)范围内的所有正整数。
c.N位:可表示0~2N-1范围内的所有正整数。
不带符号的整数在运算过程中,若其值超出了机器数可以表示的范围时将发生溢出现象。溢出后的机器数的值已经不是原来的数据。例如:4位机器数,当计算“1111+0011”时发生进位溢出,应该是10010,但只有4位,进位被丢掉了,其计算结果为0010。注意,加减都有溢出问题。
● 带符号整数的编码表示(原码、反码、补码)
a.原码
原码编码方法是:机器数的最高位表示整数的符号(0代表正数,1代表负数),其余位以二进制形式表示数据的绝对值。
原码长度(一般情况下):1、2、4、8个字节数(如8位、16位、32位、64位等)。
原码举例(8位原码):[+125]原码=01111101,[-4]原码=10000100。
原码可表示的整数范围是:
● 8位原码:-27+1~27-1(-127~127)范围内的所有整数。
● 16位原码:-(215-1)~215-1(-32767~32767)范围内的所有整数。
● n位原码:-2(n-1)+1~2(n-1)-1范围内的所有整数。
原码表示的优点是与日常使用的表示方法比较一致,简单、直观。其缺点是加法运算与减法运算的规则不一致,整数0有00000000和10000000两种表示形式。
计算机内部通常不采用原码而采用补码的形式表示带符号的整数。
b.反码
反码编码方法是:正整数的反码与其原码形式相同;负整数的反码等于其原码除最高符号位保持不变外,其余每一位取反。
举例(8位):[+33]原码=[00100001B]原码=[00100001B]反码
[-33]原码=[10100001B]原码=[11011110B]反码
c.补码
补码编码方法是:正整数的补码与其原码形式相同;负整数的补码等于其原码除最高符号位保持不变外,其余每一位取反,并在末位再加1运算后所得到的结果。
举例(8位):[+33]原码=[00100001B]原码=[00100001B]反码=[00100001B]补码
[-33]原码=[10100001B]原码=[11011110B]反码=[11011111B]补码
补码运算规则是:
● [X+Y]补码=[X]补码+[Y]补码
● [X-Y]补码=[X]补码+[-Y]补码
补码表示的整数范围是:
● 8位补码:-27~27-1(-128~127)所有整数。其中规定补码10000000表示-128。
● N位补码: -2(N-1)~2(N-1)-1范围内的所有整数。
补码的优点是:①能将减法运算转换为加法运算,便于CPU作运算处理。[X-Y]补=[X]补+[-Y]补。②原码和补码的表示位数相同,补码可表示整数的个数比原码多一个(整数0只有一种表示形式)。补码的缺点是不直观。
● BCD编码
二进制编码的十进制整数(Binary Coded Decimal,BCD)使用4个二进制位的组合表示1位十进制数字,即用4个二进制位产生16个不同的组合,用其中的10个分别对应表示十进制中的10个数字,其余6个组合为无效。符号用一个0或1表示。例如:[-53] BCD=101010011。
7.冯·诺依曼型计算机的硬件结构及其各部分的功能
1945年,美籍匈牙利科学家冯·诺依曼(图1-5)领导设计EDVAC(电子离散变量自动计算机)时,提出了两项重大改进:第一,计算机内部采用二进制,第二,采用了存储程序方式控制计算机的操作过程,简化了计算机结构,并成功地运用到了计算机的设计之中。根据这一原理制造的计算机被称为冯·诺依曼型计算机,由于他对现代计算机技术的突出贡献,因此他被称为“计算机之父”。其计算机硬件系统的基本结构包括运算器、控制器、存储器、输入设备和输出设备五大部分。
图1-5 计算机之父——冯·诺依曼
(1)运算器:又称为算数逻辑部件,它是对数据或信息进行运算和处理的部件,完成算术运算和逻辑运算。算术运算是按照算术规则进行加、减、乘、除等;逻辑运算是指非算术的运算,包括与、或、非、异或、比较、移位等。
(2)控制器:主要由指令寄存器、译码器程序计数器和操作控制器等部件组成。主要负责从存储器中读取程序指令并进行分析,然后按时间先后顺序向计算机的各部件发出相应的控制信号,以协调、控制输入/输出操作和对内存的访问。
(3)存储器:是计算机记忆和暂存数据和程序的部件或装置。存储器分为内存储器(也叫主存储器或内存)和外存储器(外存)两种。内存储器包括只读存储器(ROM)和随机存储器(RAM);外存储器包括外存硬盘、U盘、移动硬盘、光盘等。
(4)输入设备:用来把计算机外部的程序、数据等信息送入到计算机内部的设备。输入设备有磁盘、鼠标、键盘、光笔、扫描仪、麦克风等。
(5)输出设备:用来把计算机的内部信息送出到计算机外部的设备,常用的输出设备有显示器、打印机等。