数值型数据的表示及处理.doc_第1页
数值型数据的表示及处理.doc_第2页
数值型数据的表示及处理.doc_第3页
数值型数据的表示及处理.doc_第4页
数值型数据的表示及处理.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

原码、反码、补码数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚.为了能方便的与二进制转换,就使用了十六进制和八进制.下面进入正题. 数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 (-127-0 +0127)共256个. 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits ,( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 =(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确(十进制的1减1当然为0)。因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算: ( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= (00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有问题. ( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = (00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正确。问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大). 于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为: (-1280127)共256个. 注意-128没有相对应的原码和反码, (-128) = (10000000) 补码的加减运算如下: ( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = (00000001)补 + (11111111)补 = (00000000)补 = ( 0 ) 正确 ( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = (00000001) 补+ (11111110) 补= (11111111)补 = ( -1 ) 正确 所以补码的设计目的是: 使符号位能与有效值部分一起参加运算,从而简化运算规则. 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。数值型数据的表示及处理计算机内部的数值型数据都是采用二进制形式来表示的。人们日常已习惯使用十进制,书写起来很方便,而用二进制书写起来位数长得多,读起来也不一目了然。但用二进制易于用物理器件实现,运算起来规则简单,所以任何数值型数据在计算机内都是用二进制表示的。计算机中的数值型数据分成整数和实数两种,下面分别介绍它们的二进制表示方法。2.1.4.1整数(定点数)表示定点数的含义是约定小数点在某一固定位置上,整数可用定点数表示,约定小数点的位置在数值的最右边。整数分两类:无符号整数和有符号整数。(1) 无符号整数无符号整数常用于表示地址等正整数,可以是8位、16位、32位或更多位数。8位的正整数的表示范围是0255(28一1),16位的正整数的表示范围是065535(216一1),32位的正整数的表示范围是0232一1。 (2)有符号整数有符号整数使用一个二进制位作为符号位,一般符号位都放在所有数位的最左面一位(最高位),“0”代表正号“+”(正数),“1”代表负号“一”(负数),其余各位用来表示数值的大小。可以采用不同的方法表示有符号整数,一般有原码、反码和补码。为简化起见,以下假设只用一个字节来表示一个整数。带符号数表示法与运算带符号数的表示主要有真值、原码、反码、补码4种表示形式。(1)真值:是某个带符号数的真实值,通常是用十进制表示,+/号表示符号。(2)原码:将真值前面的正(负)号用代码0(1)表示且放在数值位前面,并且数值部分用二进制表示。(3)反码:将原码的符号位不变,数值位按位取反。(4)补码:在反码的末位加1。在现代计算机中,算术运算都是以补码为基础,操作数是补码的形式表示,运算结果也是以补码形式表示或存储。原码表示数值型数据的原码表示是将最高位作符号位,其余各位用数值本身的绝对值(二进制形式)表示。假设用X原表示X的原码,则+1原 =00000001 +127原 =01111111-1原 =10000001 -127原 =11111111对于0的原码表示,+0和一0的表示形式不同,也就是说,0的原码表示不惟一。+0原 =00000000 -0原 =10000000由此可以看出,8位原码表示的最大值是127,最小值是一127,表示数的范围为一127127。例如:01011101 符号位表示二进制数+1011101,即十进制数93;11011101 符号位表示二进制数一1011101,即十进制数一93。 反码表示数值型数据的反码表示规则是:如果一个数值为正,则它的反码与原码相同;如果一个数值为负,则符号位为1,其余各位是对数值位取反。假设用X反表示X的反码,则+1反 =00000001 +127反 =01111111-1反 =11111110 -127反 =1000000对于0的反码表示,+0和一0的表示形式同样不同,也就是说,0的反码表示不惟一。+0反 =00000000 -0反 =11111111用8位反码表示的最大值为127,其反码为01111111;最小值为一127,其反码为10000000。用反码表示数值型数据,现已不多用。补码表示原码和反码都不便于计算机内的运算,因为在运算中要单独处理其符号。例如,对以原码表示的+7和一9相加,必须先判断各自的符号位,然后对后7位进行相应的处理,很不方便。因此,最好能做到将符号位和其他位统一处理,对减法也按加法来处理,这就是“补码”。补码的原理可以用时钟来说明。例如,要将时针从9点拨到4点,可以向前拨,也可以向后拨,其表示如下: 95=4(向后拨5个字) 9+7=16(向前拨7个字)可见,向后拨5个字能指向4,向前拨7个字也能指向4。时钟是十二进制的,可以把12点看成0点,12点的下一个时针指向是1点,13点就是1点,其实是进位后得到了十二进制数11,其中第一个1是进位,即高位,第二个1是低位。高位不保留,只保留低位,因此16点用十二进制数表示为4,高位不保留,在时钟上就是4点,用十进制数可表示为:16124。上例中,用减法和加法都能得到4,其中12被称为模,5和7被称为模12下互补,即5的补数是7,7的补数是5。这个例子可以推广到其他进制,如十进制、二进制等。在计算机中,以一个有限长度的二进制作为数的模,如果用1个字节表示1个数,1个字节为8位,因为逢28就进1,所以模为28。对于补码是这样规定的:正数的原码、反码、补码都是相同的;负数的最高位为1,其余各位为数值位的绝对值取反,然后对整个数加1。假设用X补表示X补码,则+1补 =00000001 +127补=01111111-1补=11111111 -127补=1000001在补码表示中,0的补码表示是惟一的。+0补 = -0补 = 00000000因此在补码表示中,多出来一个编码10000000,把10000000的最高位1既看做符号位,又作为数值位,其值为一128,这样补码表示的数值范围可扩展一个,负数最小值为一128,而不是一127。用8位补码表示的数值数据其最大值为127,最小值为一128,表示数的范围为一128127。计算机一般是以补码形式存放数值数据的。例如:求一5l的补码。一51为负数,所以符号位为1,绝对值部分是原码的每一位取反后再在末位加1。-51原 =10110011其绝对值部分的每一位取反后,得 11001100再在取反后的数值末位加1,得 11001101即 -51补 = 11001101用补码进行运算,减法可以用加法来实现。例如+76应得1,可以将+7的补码和一6的补码相加,就得到结果值的补码。+7的补码: 0 0 0 0 0 1 1 1-6的补码: + 1 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 1 进位进位被舍去,进位右边的8位00000001就是l的补码。 (3)各种整数表示法的比较和表示范围各种编码方法的表数范围: 有符号数 n+1位二进制编码x表示的整数范围: 原码、反码:-2nx2n 补码:-2nx2n无符号数n位二进制编码X表示的整数范围:0X2n-1假设用8位二进制代码表示无符号整数和有符号整数,则8位二进制代码所能表示的256个不同的值在各种整数表示法中表示的数值见表25。表2-5 三种整数的比较8位二进制代码无符号整数原码补码0000 00000000000 00011110000 00102220000 00113330111 11101261261260111 11111271271271000 000012801281000 000112911271000 001013021261000 001113131251111 111025412621111 11112551271整数表示的数其范围是有限的,根据计算机的字长,整数可以用8位、16位、32位等表示。当整数分别用无符号整数、原码、反码、补码表示时,表示数的范围见表26。 表2-6 不同位数和不同表示法下数的表示范围二进制位数无符号数的表示范围补码的表示范围原码、反码的表示范围80(28-1)-27(27-1)-27(27-1)160(216-1)-215(215-1)-(215-1)215-1320(232-1)-231(231-1)-(231-1)231-1各种编码之间的相互转换: x原 x补: x0, x补= x原 ;x0,符号位不变,数值位取反+1。例1:X1原=01111111=7FH,X1补=01111111=7FH X2原=11111111=FFH,X2补=10000001=81H例2:X1原=59H,X2原=D9H,求真值? X1=+1011001B=+89 X2=-1011001B=-89例3:X1补=59H,X2补=D9H,求真值? X1=+1011001B=+89 X2=-0100111B=-39 (4)BCD码当在计算机内表示十进制整数时,除了前面介绍的先转换成二进制数,再选用原码、反码或补码表示外,还有一种表示方法也经常使用,这种编码方法称为“二进制编码的十进制整数(Binary Coded Decimal,简称BCD码),它把1位十进制数用4位二进制编码表示,符号位仍然是正数为“0”,负数为“1”。这种编码方法可形成多种形式的编码,最常用的是8421 BCD码。在8421 BCD码中4个二进制位自左至右每位的权分别是23,22,21,20,即8,4,2,1,所以称为8421 BCD码,也简称为8421码。表27列出BCD码与十进制数、二进制数的比较。 表2-7 BCD码与是十进制数、二进制数的比较十进制数二进制数8421 BCD码0000000001000100012001000103001100114010001005010101016011001107011101118100010009100110011010100001 00001110110001 00011211000001 00101311010001 00111411100001 01001511110001 0101例如,十进制数一51的BCD码为(-51)BCD=10101 0001十进制数32767的BCD码为 (32767)BCD0 0011 0010 0111 0110 01112.1.4.2实数(浮点数)表示在一定的字长下,整数表示的数值范围是有限的,这在许多应用特别是科学计算中是不够用的。因此,为了能在计算机中表示既有整数部分又有小数部分的数和一些绝对值特别大的数或特别小的数,引入浮点表示方法来表示实数。在浮点表示方法中,任何一个数可表示成: 其中,M被称为该数的尾数,E被称为该数的阶码,而R则是阶码的基数。在许多计算机高级语言中,数值型常量都可以写成浮点数的形式。例如:4.32E-2 表示 4.3210-20.0432这里4.32是尾数,一2是阶码,而基数为10。又如:0.432E-1 表示 0.43210-1=0.0432 4.32E+l 表示 4.3210+143.2从上面例子中可以看出浮点数表示方法的特点:一是同一数值可以有不同的浮点表示形式,如0.0432可表示成4.32E-2或者0.432E-1。二是在相同尾数情况下,阶码的大小可用来调节所代表数值中小数点的实际位置,如4.32E-2和4.32E+1。这里还要说明一点,基数是隐含约定的,如上例中R=10,并未在其浮点表示形式中明显地出现。在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论