数值型数据的表示及处理

上传人:宝路 文档编号:22513422 上传时间:2017-11-27 格式:DOC 页数:6 大小:80.12KB
返回 下载 相关 举报
数值型数据的表示及处理_第1页
第1页 / 共6页
数值型数据的表示及处理_第2页
第2页 / 共6页
数值型数据的表示及处理_第3页
第3页 / 共6页
数值型数据的表示及处理_第4页
第4页 / 共6页
数值型数据的表示及处理_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《数值型数据的表示及处理》由会员分享,可在线阅读,更多相关《数值型数据的表示及处理(6页珍藏版)》请在金锄头文库上搜索。

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 减 1 当然为 0) 。因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算: ( 1 )10 - (

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

4、是一样的.在补码中用(-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 ) 正确 所以补码的设计目的是

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

6、约定小数点在某一固定位置上,整数可用定点数表示,约定小数点的位置在数值的最右边。整数分两类:无符号整数和有符号整数。(1) 无符号整数无符号整数常用于表示地址等正整数,可以是 8 位、16 位、32 位或更多位数。8 位的正整数的表示范围是 0255(2 8 一 1),16 位的正整数的表示范围是 065535(2 16 一 1),32位的正整数的表示范围是 02 32 一 1。(2)有符号整数有符号整数使用一个二进制位作为符号位,一般符号位都放在所有数位的最左面一位(最高位 ), “0”代表正号“+”(正数) , “1”代表负号“一”(负数) ,其余各位用来表示数值的大小。可以采用不同的方法

7、表示有符号整数,一般有原码、反码和补码。为简化起见,以下假设只用一个字节来表示一个整数。带符号数表示法与运算带符号数的表示主要有真值、原码、反码、补码 4 种表示形式。(1)真值:是某个带符号数的真实值,通常是用十进制表示,+/号表示符号。(2)原码:将真值前面的正(负)号用代码 0(1)表示且放在数值位前面,并且数值部分用二进制表示。(3)反码:将原码的符号位不变,数值位按位取反。(4)补码:在反码的末位加 1。在现代计算机中,算术运算都是以补码为基础,操作数是补码的形式表示,运算结果也是以补码形式表示或存储。原码表示数值型数据的原码表示是将最高位作符号位,其余各位用数值本身的绝对值(二进制

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

9、码表示规则是:如果一个数值为正,则它的反码与原码相同;如果一个数值为负,则符号位为 1,其余各位是对数值位取反。假设用X 反 表示 X 的反码,则+1反 =00000001 +127反 =01111111-1反 =11111110 -127反 =1000000对于 0 的反码表示,+0 和一 0 的表示形式同样不同,也就是说,0 的反码表示不惟一。+0反 =00000000 -0反 =11111111用 8 位反码表示的最大值为 127,其反码为 01111111;最小值为一 127,其反码为10000000。用反码表示数值型数据,现已不多用。补码表示原码和反码都不便于计算机内的运算,因为在运

10、算中要单独处理其符号。例如,对以原码表示的+7 和一 9 相加,必须先判断各自的符号位,然后对后 7 位进行相应的处理,很不方便。因此,最好能做到将符号位和其他位统一处理,对减法也按加法来处理,这就是“补码”。补码的原理可以用时钟来说明。例如,要将时针从 9 点拨到 4 点,可以向前拨,也可以向后拨,其表示如下:95=4(向后拨 5 个字) 9+7=16(向前拨 7 个字)可见,向后拨 5 个字能指向 4,向前拨 7 个字也能指向 4。时钟是十二进制的,可以把12 点看成 0 点,12 点的下一个时针指向是 1 点,13 点就是 1 点,其实是进位后得到了十二进制数 11,其中第一个 1 是进

11、位,即高位,第二个 1 是低位。高位不保留,只保留低位,因此 16 点用十二进制数表示为 4,高位不保留,在时钟上就是 4 点,用十进制数可表示为:16124。上例中,用减法和加法都能得到 4,其中 12 被称为模,5 和 7 被称为模 12 下互补,即5 的补数是 7,7 的补数是 5。这个例子可以推广到其他进制,如十进制、二进制等。在计算机中,以一个有限长度的二进制作为数的模,如果用 1 个字节表示 1 个数,1 个字节为 8 位,因为逢 28 就进 1,所以模为 28。对于补码是这样规定的:正数的原码、反码、补码都是相同的;负数的最高位为 1,其余各位为数值位的绝对值取反,然后对整个数加

12、 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 的补码

13、。一 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 01 0 0 0 0 0 0 0 1进位进位被舍去,进位右边的 8 位 00000001 就是 l 的补码。(3)各种整数表示法的比较和表示范围各

14、种编码方法的表数范围:有符号数 n+1 位二进制编码 x 表示的整数范围:原码、反码:-2 nx2 n补码:-2 nx2 n无符号数 n 位二进制编码 X 表示的整数范围:0X2 n-1假设用 8 位二进制代码表示无符号整数和有符号整数,则 8 位二进制代码所能表示的256 个不同的值在各种整数表示法中表示的数值见表 25。表 2-5 三种整数的比较8 位二进制代码 无符号整数 原码 补码0000 0000 0 0 00000 0001 1 1 10000 0010 2 2 20000 0011 3 3 3 0111 1110 126 126 1260111 1111 127 127 1271

15、000 0000 128 0 1281000 0001 129 1 1271000 0010 130 2 1261000 0011 131 3 125 1111 1110 254 126 21111 1111 255 127 1整数表示的数其范围是有限的,根据计算机的字长,整数可以用 8 位、16 位、32 位等表示。当整数分别用无符号整数、原码、反码、补码表示时,表示数的范围见表 26。表 2-6 不同位数和不同表示法下数的表示范围二进制位数 无符号数的表示范围 补码的表示范围 原码、反码的表示范围8 0(2 8-1) -27( 27-1) -27(2 7-1)16 0(2 16-1) -215( 215-1) -(2 15-1) 215-132 0(2 32-1) -231( 231-1) -(2 31-1) 231-1各种编码之间的相互转换: x原 x补:x0, x补= x 原 ;x0,符号位不变,数值位取反+1。例 1:X1原

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号