关于浮点数的一个问题

2025-03-01 10:38:05
推荐回答(1个)
回答1:

这是2003年软考程序员试题吧,我正准备软考,所以看起来比较亲切,赫赫。其实这替我也有疑问,不过和你的问题不同,我是弄懂了解题的基本思路却推出的答案是B……所以在这里解答你的问题的同时也希望大家能一起讨论一下,看看这题的正确答案究竟如何推得。

仔细阅读题干,“单精度浮点数的最高位为符号位”就是说第一位是数符;
“后面跟8位经偏移的阶码移码”就是说2-9位是用移码表示的阶码,这其中已经包含了阶符(移码是专用来表示浮点数数阶的,其定义就是将补码的符号位取反所得);最后23位是尾数码。

所以这道题的答案 0 10000110 01100100010000000000000
数符:0
阶符:1
阶码:10000110(前面那个1是移码的符号位,不能分开写)
尾数:01100100010000000000000

在来说说解题思路,看看为什么要选这个答案:

十进制数:+178.125
转化为二进制原码表示: 0 10110010.001
符号位正,所以数符为0
又因为“尾数用原码表示,且把尾数规格化为1.xxx...x(x为0或1),并将1去掉”,所以将该原码转化为 0 1.0110010001 2^7 ,即尾数用原码表示为:01100100010000000000000(用0补齐23位),以上都没有问题,关键在于小数点应该左移7阶,所以阶码为+7,用原码表示为:0 0000111,转化为移码为:1 0000111,这样一来就该选B了……我是按照基本定义一点点来的啊,也不知道上面推导哪里出错了。希望大家能帮忙看看。

另外,楼主,我将一个关于原码、反码、补码、移码的定义以及浮点数的运算规则的文档(是Word格式,放心没有病毒)放在一个yahoo公文包中了(用户名和密码我用baidu消息发给你,记得察看baidu消息),这篇文章对相关知识讲得比较清楚,推荐你看看。

公文包地址:http://cn.briefcase.yahoo.com/zyjiale