码制表示


机器数

       一个数在计算机中的表现形式,既可能是原码,也可能是补码甚至是反码;当然目前绝大多数电脑存储是利用补码存储,表示机器数的。

真值

       即一个数代表的实际值,例如告之你10000011是用原码表示的,那么它的真值就是表示-3;

原码

       第一位符号位,其它位是该数真值的绝对值;

反码

       考虑两种情况,正数的反码是其本身,负数反码是除符号位以外各位取反;

       在使用原码或者反码时,请将0也带正负号考虑,即存在+0-0,只不过它们对应的真值是相同的,+0 原码0000 0000 反码 0000 0000, -0 原码1000 0000 反码1111 1111];

补码

       同反码一样,考虑正负数情况,正数情况下,补码与原码相同,负数情况除符号位以外,各位取反加1;

       在补码中,没有-0的概念,那么1000 0000 补码表示的是-128。

       正如上所述,计算机存储都是使用的补码,而补码的好处在于,一方面使符号位能与有效值部分一起参加运算,二使减法运算转换为加法运算(这样计算机中只需要设计加法器即可),优化线路设计。

移码(增码)

       即补码符号位取反,其它不变。数据公式表示则是,真值加上2的k 次方,k表示该数的位宽(不包含符号位)。例如假设数据宽度为8比特(1比特符号位,7比特数据位),那么-5的移码:先加上128等于123(0111 1011)那么-5的移码就是0111 1011。同样+5的移码则是133,所以是1000 0101。

       使用它的好处在于,可以直观从二制数中感受到真值的大小。例如,-5的移码是0111 1011 +5的移码是1000 0101,直观上看1000 0101> 0111 1011,相比补码则不具备该优点。

       主要用于浮点数的阶码。至于原因,笔者从网上查到两种说法,一种说有利于阶码的加减运算,二是防止下溢,笔者更倾向于后者。例如假设一个处于负无穷时,符号位为0,尾数为全0,阶码应该是-128(以8位阶码为例),即-128的补码是1000 0000,而移码是0000 0000。所以无穷小溢出时,如果阶码用移码表示则所有比特全0,非常方便判断,而如果是补码表示还有一个1,需要使用更多的计算资源去判断,所以阶码用移码。详细解释见“浮点数格式的设计”。

       注意:以上描述都是标准移码转换。然后在在IEEE 754浮点数表示中移码是非标准的,它的偏移值为2k-1,也就是说对于单精度浮点数的偏移值为127。

转换关系

       上述描述都是针对从原码转成反码或者补码,实际上描述是可逆的,例如知道一个数的反码,那么转成原码,也是当符号位为正时,不变,符号位为负时,除符号位以外各位取反。而补码转原码,当符号位正时不变,符号位为负时,除符号位以外各位取反加1。

浮点数格式的设计

       定义一种浮点数表示方式需要确定6个参数,这6个参数的确定原则如下:  

       1、尾数m的数制和码制。主要从运算简单、表数直观等方面来考虑。目前多数机器用小数、原码表示,只有早期的一些没有硬件乘除法指令的机器采用补码表示。尾数采用原码制表示,虽然加减法比采用补码表示复杂,但乘除法要比采用补码表示简单得多,而且,采用原码表示非常直观。

另外,尾数采用小数表示能简化运算,特别是乘除法运算。

       2、阶码e的数制和码制,目前一般机器都采用整数、移码(或称增码、偏码、余码等)表示。阶码采用移码表示的主要原因是:使浮点0与机器0一致。如果浮点0与机器0不同,对机器硬件和软件的设计都会产生许多麻烦。例如,要判断运算结果是否为0必须作特殊的处理。然而阶码采用移码表示后,在做浮点乘除法运算时,由于阶码要进行加减运算,移码的加减法运算要比补码复杂。

由于阶码主要是用来扩大浮点数的表数范围的,因此,它必须用整数表示。

       3、尾数的基值,在上一节中已经得出结论:在浮点数的总字长一定的情况下,尾数的基值选择2,浮点数具有最大的表数范围和最高的表数精度。如果再采用隐藏位表示方法,则这种浮点数表示方法同时又具有最高的表数效率。  

       4、阶码的基值,在一般通用计算机中,浮点数阶码的基值都取2,这是因为,在目前的一般计算机中,基本存储单元都是二态的。另外,浮点数中的阶码起指数的作用,主要用来扩大表数范围,阶码采用其它进位制与采用二进制相比并不能扩大浮点数的表数范围,因此,浮点数中的阶码采用二进制是必然的。

       另外两个参数是尾数字长p和阶码字长q,如何确定尾数字长p和阶码字长q,这是本节要解决的主要问题。

       目前,多数计算机的短浮点数是32位(二进制),长浮点数是64位,尽管在早期计算机中,浮点数的字长有16位、24位、36位、48位等多种,但这些计算机目前已经很少使用。在浮点数总字长中,除了尾数符号和阶码符号各占一个二进制位之外,其余都由尾数字长p和阶码字长q占据。

       在前一节的分析中已经介绍过,在浮点数表示方式中,尾数字长p主要影响表数精度,阶码字长q主要影响表数范围,而浮点数的表数范围和表数精度是浮点数的两个最主要的特性。

       浮点数的表数范围和表数精度是从计算机的实际应用领域中提出来的,不同的应用领域对浮点数的表数范围和表数精度可能有不同的要求。以下,主要介绍在浮点数的表数范围和表数精度给定的情况下,如何具体确定浮点数的尾数字长p和阶码字长q,即设计浮点数的格式。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值