您的位置:首页 > 其它

补码,反码,原码的范围总结

2016-09-21 14:50 274 查看
刚刚碰到一个题目,需要写出一种浮点数范围的题。

原题如下

假定一种浮点数格式是1位数符,7位阶码,8位尾数。其中尾数用补码表示,阶码用移码表示。

问,此格式可以表示的数据范围。

无疑,我们不用关注下溢的问题,只用找出最大正值和最小负值即可。

这里有两个重点:阶码的表示范围和尾数能够表达的范围。

我们知道IEEE754的尾数是用原码表示,默认高位是1,在补码这里没有。我们纯粹关心8位补码能表示多大的小数即可。

而当一论到补码时,莫名就恐慌起来。今天总结到这里,梳理清楚思考路径。

我们知道原码的范围很好求,因为很自然,而反码呢,只是表示与原码不同,意义相同。所以范围一致。而反码和补码也只相差一位,即是否加1,所以,它们三都可以用原码去思考。唯一不同的是,原码和反码都有一个-0,而这个-0在补码那里用于表示-1,或者最小的负数。比如8位表示整数,其中一位是符号位,那么,正数最大是27−1=127, 负数最小是-128。

而小数的话,因为数符已经有了,不用再拿出一位表示符号,因此这8位小数就表示纯粹的小数。

另外,这个区别于IEEE754标准,因为单精度浮点数两个地方是特殊的。

偏置值是28−1−1,也即单精度是127

尾数用原码且默认高位是1,隐含起来了

但在这里呢,就是纯粹的编码计算问题。

因此,8位补码小数的范围:由原码可知,最大小数是0.11111111(8个1) = 1 - 2^(-8),最小负数是-1.

再看阶码,由7位(1位字符,6位数据)组成,因此最大可表示的阶码(连通最高位一起)是20+21+...+26=27−1=127,偏置值取2(7−1)=64。

所以最大是127-64 = 63.

或者直接根据与补码表示范围相同推知,表示范围是[−26,26−1]=[−64,63]

在IEEE754中,阶码的最大值是254,范围是1-254,留了两个阶码值状态:0,255表示规格化和无穷大。

这里的表示不用这么考虑。

所以范围可定:(−1,1−2−8)⋅263

以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  组成原理 编码 数制