数值型数据的表示及处理.docx

上传人:小飞机 文档编号:3558791 上传时间:2023-03-13 格式:DOCX 页数:11 大小:41.95KB
返回 下载 相关 举报
数值型数据的表示及处理.docx_第1页
第1页 / 共11页
数值型数据的表示及处理.docx_第2页
第2页 / 共11页
数值型数据的表示及处理.docx_第3页
第3页 / 共11页
数值型数据的表示及处理.docx_第4页
第4页 / 共11页
数值型数据的表示及处理.docx_第5页
第5页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数值型数据的表示及处理.docx》由会员分享,可在线阅读,更多相关《数值型数据的表示及处理.docx(11页珍藏版)》请在三一办公上搜索。

1、数值型数据的表示及处理原码、反码、补码 数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚.为了能方便的与二进制转换,就使用了十六进制和八进制.下面进入正题. 数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 (-127-0 +0127)共256个. 有

2、了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits ,( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 =(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确。因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算: ( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -

3、1 ) 10= (00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有问题. ( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = (00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正确。问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大). 于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0

4、),所以补码的表示范围为: (-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 ) 正确 所以补码的设计目的是: 使符号位能与有效值部分一起参加运算,从而简化运

5、算规则. 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。 数值型数据的表示及处理 计算机内部的数值型数据都是采用二进制形式来表示的。人们日常已习惯使用十进制,书写起来很方便,而用二进制书写起来位数长得多,读起来也不一目了然。但用二进制易于用物理器件实现,运算起来规则简单,所以任何数值型数据在计算机内都是用二进制表示的。计算机中的数值型数据分成整数和实数两种,下面分别介绍它们的二进制表示方法。 2.1.4.1整数(定点数)表示 定点数的含义是约定小数点在某一固定位置上,整数可用定点数表示

6、,约定小数点的位置在数值的最右边。整数分两类:无符号整数和有符号整数。 (1) 无符号整数 无符号整数常用于表示地址等正整数,可以是8位、16位、32位或更多位数。8位的正整数的表示范围是0255(2一1),16位的正整数的表示范围是065535(2一1),32位的正整数的表示范围是02一1。 (2)有符号整数 有符号整数使用一个二进制位作为符号位,一般符号位都放在所有数位的最左面一位(最高位),0代表正号+(正数),1代表负号一(负数),其余各位用来表示数值的大32816小。可以采用不同的方法表示有符号整数,一般有原码、反码和补码。为简化起见,以下假设只用一个字节来表示一个整数。 带符号数表

7、示法与运算 带符号数的表示主要有真值、原码、反码、补码4种表示形式。 真值:是某个带符号数的真实值,通常是用十进制表示,+/号表示符号。 原码:将真值前面的正号用代码0表示且放在数值位前面,并且数值部分用二进制表示。 反码:将原码的符号位不变,数值位按位取反。 补码:在反码的末位加1。 在现代计算机中,算术运算都是以补码为基础,操作数是补码的形式表示,运算结果也是以补码形式表示或存储。 原码表示 数值型数据的原码表示是将最高位作符号位,其余各位用数值本身的绝对值(二进制形式)表示。假设用X原表示X的原码,则 +1原 =00000001 +127原 =01111111 -1原 =10000001

8、 -127原 =11111111 对于0的原码表示,+0和一0的表示形式不同,也就是说,0的原码表示不惟一。 +0原 =00000000 -0原 =10000000 由此可以看出,8位原码表示的最大值是127,最小值是一127,表示数的范围为一127127。 例如: 0 1 0 1 1 符号位 表示二进制数+1011101,即十进制数93; 1 1 0 1 1 1 0 1 1 0 1 符号位 表示二进制数一1011101,即十进制数一93。 反码表示 数值型数据的反码表示规则是:如果一个数值为正,则它的反码与原码相同;如果一个数值为负,则符号位为1,其余各位是对数值位取反。假设用X反表示X的反

9、码,则 +1反 =00000001 +127反 =01111111 -1反 =11111110 -127反 =1000000 对于0的反码表示,+0和一0的表示形式同样不同,也就是说,0的反码表示不惟一。 +0反 =00000000 -0反 =11111111 用8位反码表示的最大值为127,其反码为01111111;最小值为一127,其反码为10000000。用反码表示数值型数据,现已不多用。 补码表示 原码和反码都不便于计算机内的运算,因为在运算中要单独处理其符号。例如,对以原码表示的+7和一9相加,必须先判断各自的符号位,然后对后7位进行相应的处理,很不方便。因此,最好能做到将符号位和其

10、他位统一处理,对减法也按加法来处理,这就是补码。 补码的原理可以用时钟来说明。例如,要将时针从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被称

11、为模12下互补,即5的补数是7,7的补数是5。 这个例子可以推广到其他进制,如十进制、二进制等。在计算机中,以一个有限长度的二进制作为数的模,如果用1个字节表示1个数,1个字节为8位,因为逢28就进1,所以模为2。 对于补码是这样规定的:正数的原码、反码、补码都是相同的;负数的最高位为1,其余各位为数值位的绝对值取反,然后对整个数加1。假设用X补表示X补码,则 +1补 =00000001 +127补=01111111 -1补=11111111 -127补=1000001 在补码表示中,0的补码表示是惟一的。 +0补 = -0补 = 00000000 因此在补码表示中,多出来一个编码100000

12、00,把10000000的最高位1既看做符号位,又作为数值位,其值为一128,这样补码表示的数值范围可扩展一个,负数最小值为一128,而不是一127。 用8位补码表示的数值数据其最大值为127,最小值为一128,表示数的范围为一128127。计算机一般是以补码形式存放数值数据的。 例如:求一5l的补码。一51为负数,所以符号位为1,绝对值部分是原码的每一位取反后再在末位加1。 -51原 =10110011 其绝对值部分的每一位取反后,得 11001100 再在取反后的数值末位加1,得 11001101 即 -51补 = 11001101 8用补码进行运算,减法可以用加法来实现。例如+76应得1

13、,可以将+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 补码:-2x2 无符号数n位二进制编码X表示的整数范围: nn 0X2n-1 假设用8位二进制代码表示无符号整数和有符号整数,则8位二进制代码所能表示的256个不同的值在各种整数表示法中表示的数值见表25。

14、表2-5 三种整数的比较 8位二进制代码 无符号整数 原码 补码 0000 0000 0 0 0 0000 0001 1 1 1 0000 0010 2 2 2 0000 0011 3 3 3 0111 1110 126 126 126 0111 1111 127 127 127 1000 0000 128 0 128 1000 0001 129 1 127 1000 0010 130 2 126 1000 0011 131 3 125 1111 1110 254 126 2 1111 1111 255 127 1 整数表示的数其范围是有限的,根据计算机的字长,整数可以用8位、16位、32位等

15、表示。当整数分别用无符号整数、原码、反码、补码表示时,表示数的范围见表26。 表2-6 不同位数和不同表示法下数的表示范围 二进制位数 无符号数的表示范围 补码的表示范围 原码、反码的表示范围 8 16 32 0 0 0 8-2 -215 -231 77-2 -215-1 -231-1 77各种编码之间的相互转换: 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=+10110

16、01B=+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,2

17、2,21,20,即8,4,2,1,所以称为8421 BCD码,也简称为8421码。表27列出BCD码与十进制数、二进制数的比较。 表2-7 BCD码与是十进制数、二进制数的比较 十进制数 二进制数 8421 BCD码 0 0000 0000 1 0001 0001 2 0010 0010 3 0011 0011 4 0100 0100 5 0101 0101 6 0110 0110 7 0111 0111 8 1000 1000 9 1001 1001 10 1010 0001 0000 11 1011 0001 0001 12 1100 0001 0010 13 1101 0001 0011

18、 14 1110 0001 0100 15 1111 0001 0101 例如,十进制数一51的BCD码为 (-51)BCD=10101 0001 十进制数32767的BCD码为 (32767)BCD0 0011 0010 0111 0110 0111 2.1.4.2实数(浮点数)表示 在一定的字长下,整数表示的数值范围是有限的,这在许多应用特别是科学计算中是不够用的。因此,为了能在计算机中表示既有整数部分又有小数部分的数和一些绝对值特别大的数或特别小的数,引入浮点表示方法来表示实数。 在浮点表示方法中,任何一个数可表示成: N=MR E其中,M被称为该数的尾数,E被称为该数的阶码,而R则是阶

19、码的基数。 在许多计算机高级语言中,数值型常量都可以写成浮点数的形式。 例如:4.32E-2 表示 4.32100.0432 这里4.32是尾数,一2是阶码,而基数为10。 又如:0.432E-1 表示 0.43210=0.0432 +1 4.32E+l 表示 4.321043.2 从上面例子中可以看出浮点数表示方法的特点:一是同一数值可以有不同的浮点表示形式,如0.0432可表示成4.32E-2或者0.432E-1。二是在相同尾数情况下,阶码的大小可用来调节所代表数值中小数点的实际位置,如4.32E-2和4.32E+1。 这里还要说明一点,基数是隐含约定的,如上例中R=10,并未在其浮点表示

20、形式中明显地出现。 在计算机内部表示的浮点形式的实数,不论其尾数部分还是阶码部分都是二进制数,且尾数部分是二进制定点纯小数,而阶码部分则为二进制定点整数;基数通常隐含为2,即R=2。在浮点数表示中,数符和阶符都各占一位,阶码的位数表示数的大小范围,尾数的位数表示数的精度。 例如,若某机器字长为16位,规定前6位表示阶码(包括阶符),而后10位表示尾数(包括尾符,也就是整个数的符号),则16位的分布如下: 阶符 阶码 数符 尾数 1 26 7 816 例如:16位浮点数 0 00101 1 110101000 阶符 阶码 数符 尾数 表示的数是: 一(0.110101)22 (101)2=(一-1-211010.1)2(26.5)10

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号