对于IEEE754移码取值问题的一点臆测

  昨晚,科协的群里提到了移码,相对陌生的词汇,我从未见过,后来搜索了下资料,发现了IEEE754中采用的是127(32bit),很是疑惑,一般不都是128吗?

  经过计算发现了一个现象,只能说这个相当巧妙!

—————————————————————————————————————————————————————

1.   首先IEEE754  为何定义规格化、非规格化、无穷大、NaN  

    注:以下均以32位浮点数为例   

        A.  规格化:阶数(exp)不为0和255  

        B.  非规格化:exp=0  

        C.  无穷大:exp=255,尾数(frac)=0   

        D.  NaN:exp=255,frac!=0   

2.   什么是移码?   

    移码就是符号位取反的补码   

      例如:   

        补码:10000001 (-127=-128+1)   

        移码:00000001 (补码+最高位的原码数值128)   

        当然上例是最最普通的例子。   

        我们因此而得到的效果为: 

                            00000000=-128  

                            00000001=-127  

                                。。。。。。   

                            11111111=127(01111111(127)+10000000(128))   

    相对于原来的二进制表示而言,这里更加容易比较大小,这个很明显。   

    但是   

    为什么IEEE754不是加128,而是127?   

        最精辟的就是这里了,这个和我们1中讲述的4中状态有关   

            首先,我们先来按照上面的来计算一边   

                  -128+127=11111111=-128(10000000+01111111)   

                  -127+127=00000000=-127 

                            。。。。。。   

                    127+127=11111110=127  

  先来看11111111,按照128的算法,这个值应该是最大的,但是这里确实最小的,好吧,IEEE754  的目的达到了,这个值绝对不可取,因此,作为两个特殊状态,至于另外的00000000,原则上说这个值是合法的,但是这里令它表示非规格化,至于为什么,你们得问IEEE 组织了,但是好歹他也被赋予了合法的地位(笑),我们的确需要非规格化数,也只有它的形式最特殊了。 

———————————————————————————————————————————————————————

不知道对不对,希望大家斧正^_^

转载于:https://my.oschina.net/codesun/blog/79673

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值