§1.2.5 数的运算中的溢出问题
由于计算机中运算器的位数有限,它所能表示数的范围也就受到限制,运算过程中一旦超出这个限制,运算结果就会产生错误,这就是计算机的"溢出"问题。
一个n位无符号数,其最小值为0,最大值为(2的n次方) 。例如,8位无符号数,所能表示的数的范围是0~255。16位无符数,所能表示的数的范围是0~65535。
一个n位带符号数,其最小值为 ,最大值为 。例如,8位有符号数,所能表示的数的范围是-128~+127。
16位有符号数,所能表示的数的范围是-32768~+32767。
在微型机中,使用双高位来判别有符号数加、减运算是否溢出。所谓双高位判别,即规定符号位(用 CS表示)有进位时,CS =1,否则 CS=0。数值部分最高位(用CP 表示)有进位时CP =1,否则CP =0。若CS⊕CP=1("异或"运算),则有溢出产生。
使用最高位(用CF 表示)来判别无符号数加、减运算是否溢出。
当最高位有进位时,CF =1,否则CF =0。
注意:
(1) 上述 CS和CF的值是相同的,对于无符号数称为CF ,对于有符号数,由于最高位代表符号,故称为CS。
(2) 除法运算(无符号数和有符号数)溢出时,产生"除数为0"中断,不能用上述方法或其他方法判别除法运算溢出。
(3) 乘法运算始终不会溢出。
§1.2.6 十进制数的二进制编码(BCD)
人:习惯十进制数。
计算机:只能直接处理二进制数。
因此,用二进制编码表示十进制数,这种编码称为BCD码。
使用四位二进制编码0000~1001分别表示十进制数0~9。
例如,十进制制数1992, 其BCD码格式是: 0001 1001 1001 0010
不但可以用8421BCD码表示十进制数,而且还可直接在计算机中进行运算。但由于进位(或借位)不同,例如加法时,十进制是逢十进一,四位二进制数是适十六进一,而且又不允许出现舍去的6种编码,所以BCD码直接运算时需要修正,8086中DDA指令就可完成这一功能。
§1.2.7 符号的二进制编码
要让计算机处理各种符号,如,汉字、英文字母、标点符号、数字、数学符号、物理符号等,也必须对这些符号进行编码。
人类使用的符号非常多,只能选出常用部分字符进行编码,供计算机处理,被选出的供计算机处理的符号称为字符集。
1、 ASCII码
英文字符集是美国信息交流标准代码,简称ASCII码(American Standard Code forInformation Interchange)。
ASCII码采用7位二进制编码,共计128个字符,7位ASCII如下表所示,包含:
26个大写英文字符,A~Z。(A=41H,B=42H,….)
26个小写英文字符,a~z。(a=61H,b=62H,….)
10个数字,0~9。(0=30H, 1=31H,….,9=39H)
其他字符。 (空格键SP=20H, ESC键=1AH, 回车CR=0DH, 换行LF=0AH)
2、 汉字编码
(1) GB2312-80。
简体中文国标字库(1981年订,中国大陆)。7445个字符,其中汉字6773个,包括一级汉字3755个,二级汉字3008个。采用2字节(16位二进制)编码。
国标GB2312规定,所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区和位号简单地组合在一起就构成了该汉字的"区位码"。在汉字的区位码中,高两位为区号,低两位为位号。由此可见,区位码与汉字或符号之间是一一对应的。
内码:汉字的内码是指在计算机中表示汉字的编码。机内码与区位码稍有区别。为什么不直接用区位码作为计算机内的编码呢? 这是因为汉字的区码和位码的范围都在1到94内, 如果直接用区位码作机内码, 就会与基本ASCII码冲突。
汉字的内码通常与所使用的计算机系统有关。目前,对于国内大多数的计算机系统,一个汉字的内码占两个字节,分别称为高位字节与低位字节,且这两位字节与区位码的关系如下:
内码高位=区码+A0H(H表示十六进制)
内码低位=位码+A0H
例如:
汉字"啊"的区位码为"1601",区码和位码分别用十六进制表示即为"1001H",则它的内码为"B0A1H"。其中B0H为内码的高位字节,A1H为内码的低位字节。 (1997年《计算机世界》第十二期: 学习与实践版,《计算机的发展应用及计算机中的信息表示》 )。
(2) BIG5码。
香港、台湾地区使用的汉字编码。13053个汉字。
(3) HZ码。
便于Internet传输的7位汉字编码字符集。(某些Internet主机不支持8位码的传输)。
(4) ISO10646(1992年)。
国际标准大字符集汉字系统(CJK:中、日、韩统一汉字编码字符集),20902个汉字。通用多8位编码(UCS)。对应的中国国家标准是GB-13000,其内码标准为GBK国家汉字扩充内码规范(1996年)。
(1997年《计算机世界》第十一期: 技术专题版,基于GBK代码体系的CJK大字符集 开放系统中文平台的设计与实现专题综述)
注意:某些软件可能只能识别一种或几种汉字编码,当遇到不能识别的汉字编码时,显示出乱字符(称"乱码"),此时,应使用内码转换软件,如"两岸通"、"南极星"等。
§1.2.8 电压的编码表示
计算机要处理电压、电流、温度、压力、位移、速度等模拟量信息时,也必须把这些信息进行编码。把模拟量用数字表示称为"模/数转换"(A/D转换)。模数转换一般用专门的硬件电路来完成,这种硬件电路称为A/D转换器(ADC: A/D Converter)。 一般A/D转换器能够把电压转换为与之成正比的数字。例如,用16位二进制数表示 -5V~+5V电压,则-5V=-32768,+5V=+32767。
D=(65536/10)V
对于其他类型的模拟量,一般使用称为"传感器"的设备将其转换为电压,再由A/D转换器变换为计算机能够处理的数字。
计算机进行计算后,可能需要控制生产设备,如电机、阀门等,而这些设备需要电压等模拟信号才能控制,因此,需要把计算机运算得到的数字变换为电压等模拟量,这一过程称为"数/模转换"(D/A转换),一般由称为"D/A转换器(DAC)"的硬件电路来完成
§1.2.9 声音、图象的编码表示
在计算机中,声音、图象也用编码表示,编码一般存为一个文件,
如:WAV、MIDI、MP3声音文件。
BMP、JPG、GIF:图形文件。
AVI、MOV:电影文件