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