阶码:对于任意一个二进制数N,可用N=S×2P表示,其中S为尾数,P为阶码,2为阶码的底,P、S都用二进制数表示,S表示N的全部有效数字,P指明小数点的位置。
阶码:在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码。
1、当阶码为固定值时,数的这种表示法称为定点表示,这样的数称为“定点数”;当阶码为可变时,数的这种表示法称为浮点表示,这样的数称为“浮点数”。
2、“移码”用来表示浮点型小数的阶码。对于正数,符号位为“1”,其余位不变,如+1110001的阶码为11110001;对于负数,符号位为“0”,其余位取反,最后加“1”,如–1110001的阶码为00001111。
1、移码(又叫增码)是符号位取反的补码,一般用指数的移码减去1来做浮点数的阶码,引入的目的是为了保证浮点数的机器零为全0。
2、用补码表示阶码的时候,当阶码无限小,产生了下溢的时候,阶码变成了0,那么这个浮点数的值变为了1。若阶码上溢(超过了阶码表示的最大值)置溢出标志,若阶码下溢(移码表示是00…0),要置结果为机器0。
3、使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
4、补码这个编码方案要解决的是如何在机器中表示负数,其本质意义为用一个正数来表示这个正数对应的负数。所谓-20的补码是指:如何在机器中用补码形式表示-20。
通常定点数有两种表示法,均设P=0,小数点是隐含的,若数值部分为n位:
当S为纯整数时,此时定点数只能表示整数,所能表示的N范围是(2n-1)≥N≥-(2n-1);当S为纯小数时,此时定点数只能表示小数,所能表示的N范围是(1-2-n)≥N≥-(1-2-n)。
实际数值不一定都是纯整数或纯小数,运算前可选择比例因子,使所有原始数据化成纯小数或纯整数,运算后再用比例因子恢复成实际值。
1、BCD码
2、阶码
3、移码
通常,我们习惯用十进制数表示数据,但计算机是用二进制数来表示数据的,这就需要进行数值进制之间的转换。我们把每位十进制数转换二进制数的编码,简称为BCD码(BinaryCodedDecimal)。BCD编码具有二进制数的形式以满足数字系统的要求,又具有十进制数的特点。在某些情况下,计算机也可以对这种形式的数直接进行运算。
它是一种数字压缩存储编码,一个字节有8位,而数字0到9最多只需要使用4位,如果用一个字节来存储一个数字相对就会有一定的浪费,尤其是在传输过程中,由此人们就想出了压缩的办法,就是BCD编码。
BCD编码将一个字节的8位拆分成高4位和低4位两个部分,也就是说一个字节能存储两个数字。所以BCD的编码过程就是将数字压缩的过程,将两个字节的数字压缩成一个字节。反之,解码就是把一个字节的数字拆分为两个数字单独存放(大部分的处理都是按字节处理的)。
BCD码使用4位二进制数编码来表示1位十进制数(与十六进制数类似)。这种编码方法有多种,常见的有以下几种:
?8421BCD编码
这是一种使用最广的BCD码,是一种有权码,其各位的权分别是(从最有效高位开始到最低有效位)8、4、2、1(即23、22、21、20),因而称为“8421BCD编码”。
在使用8421BCD码时一定要注意其有效的编码仅十个,即:0000~1001。4位二进制数的其余6个编码1010、1011、1100、1101、1110、1111不是有效编码。8421BCD编码如表2-3所示。这种BCD编码实际上就是0~9的“等值”二进制数。
阶码
2421BCD编码2421BCD码也是一种有权码,其从高位到低位的权分别为2、4、2、1(同样也是它得名的原因),其也可以用4位二进制数来表示1位十进制数。
?余3码
余3码也是一种BCD码,但它是无权码。但由于每一个码对应的8421BCD码之间相差3,故称为余3码,其一般使用较少,故只须作一般性了解。
用BCD码进行进制的转换时,要求在两种进制的表现形式上快速转换,而不是要求在“数值相等”的含义快速转换。
例如求十进制数2000的BCD编码和其二进制数。
2000的BCD编码是把每位上的数2、0、0、0分别转换为其对应的BCD编码:0010、0000、0000和0000,把它们合在一起就是2000的BCD编码:0010000000000000。
十进制数2000的二进制数是:11111010000,它们在数值上是相等的。
将十进制数86.5转换为BCD码,最终的结果是:(10000110.0101)BCD。
将BCD码10010111.0100转换为十进制数的结果是:97.4。
在IBMPC机中,根据在存储器中的不同存放格式,BCD码又分为:
?压缩型BCD码:一个字节中存放两个十进制数码。
?非压缩型BCD码:每个字节只存放一个十进制数。
例如:将十进制数8762用压缩型BCD码表示,则为:1000011101100010。
表示浮点数时还常用一种称为移码的码制。浮点数的阶码表示指数大小,有正有负,为避开阶码的符号,对每个阶码都加上一个正的常数(称偏移常数),使能表示的所有阶码都为正整数,变成“偏移”了的阶码,又称“增码”。移码的值不小于0,这样阶码总为0,可以取消,浮点数小数点的实际位置由移码减去偏移常数来决定。
一个实数可表示成一个纯小数与一个乘幂之积。如;-0.0010011=-0.10011×2^-10(10在这里也是二进制);-110001101=-0.110001101×2^1001(1001同样为二进制)。
一个任意实数,在计算机内部可以用指数(为整数)和尾数(为纯小数)来表示,用指数和尾数表示实数的方法称为浮点表示法。
浮点数的长度可以是32位、64位甚至更长,分阶码和尾数两部分。阶码位数越多,可表示的数的范围越大;尾数越多,所表示的数的精度越高。“移码”用来表示浮点型小数的阶码。
移码与补码的关系是符号位互为反码,例如:X=+1011时,[X]移=11011,[X]补=01011;X=–1011时,[X]移=00101,[X]补=10101。
注意:对移码运算的结果需要加以修正,修正量为2n,即对结果的符号位取反后才是移码形式的正确结果。移码表示中,0有唯一的编码——1000…00,当出现000…00时(表示–2n),属于浮点数下溢。