关于浮点数的一个问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 11:48:36
●IEEE754标准规定:单精度浮点数的最高位为符号位,后面跟8位经偏移的阶码移码),偏移量为+127。尾数用原码表示,且把尾数规格化为1.xxx...x(x为0或1),并将1去掉,尾数用23位表示。根据该标准,十进制数+178.125的规格化表示形式为___(45)___。

A.0 10000110 01100100010000000000000

B.0 10000111 01100100010000000000000

C.1 10000100 01100100010000000000000

D.0 10000110 11100100010000000000000

答案是A:
0 10000110 0110 0100 01 0000 0000 0000 0

阶符:0
阶码:10000110
尾数:规格化后0110 0100 01,再加13个0,构成23位。

大家看下这道题,有些疑问,浮点数的表示形式一般不是:阶符+阶码+数符+尾数吗,这道题怎么没有加数符呢?

这是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://c