浮点数的计算机表示问题

有小数-10.625(十进制)把它二进制后为-1010.101(二进制)。保存到32位内存中:先将-1010.101小数点左移三位,规格为:-1.010101,然后分为三... 有小数-10.625(十进制)把它二进制后为-1010.101(二进制)。
保存到32位内存中:先将-1010.101小数点左移三位,规格为:-1.010101,然后分为三部分。
S位:1 (这个应该对)
阶码部分:十进制应为:3 二进制原码:0 000 0011 反码:0 111 1100 补码:0 111 1101 移码:1 111 1101 对应十进制:-125
尾数部分:将1010.101,小数点左移三位变为1.010101 ,最左侧1应隐含,所以只表示010101,但尾数共23位,如何表示010101呢?如果 000 0000 0000 0000 0001 0101表示,则加上隐含的1 则应为:1000 0000 0000 0000 0001 0101 也不对啊,那么尾数部分到底该如何表示?
请问,我以上推测中,移码部分的表达,和尾数的表达对吗?请耐心解答一下。另:如何才能看到浮点数在内存中的真实存偖情形?
展开
 我来答
海狮2D
2012-01-31 · TA获得超过3018个赞
知道大有可为答主
回答量:1904
采纳率:55%
帮助的人:977万
展开全部
其实前面已经是最专业的解释了IEEE-754,这个是最常用的表示法。
由于浮点数本身比整数复杂,需要表示的东西也多,所以表示法都是需要很长的叙述的。
如果想看实际情况,最好不要看内存,那个对新手不好。
看寄存器,或者下面那样。
至于计算:因为你这么写会降低精度,所以是不对的。
浮点数要有考虑:过大、过小、不是数(NaN)等的表述所以麻烦,另外计算的简单性是主要的考虑因素,而不是表述的易理解性是主要考虑因素。这种浮点数的加法(减法)和整数用的是同样的电路。

标准代码:
#include <stdio.h>
int main(int argc, char*argv[]) {
float f=-10.625;
unsigned int u=*(unsigned int*)&f;
printf("f is 0x%08X\n", u);
return 0;
}

结果一般是:
0xC12A0000
1100 0001 0010 1010 0000 0000 0000
上海巴鲁图工程机械科技有限公司_
2022-05-15 广告
光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器每转输出60(我们用老板没有说)个脉冲,五线制。其中两根为电源线,三根为脉冲线(A相、B相、Z)。电源的工作电压为 (+5~+24V)直流电源。光... 点击进入详情页
本回答由上海巴鲁图工程机械科技有限公司_提供
匿名用户
2012-01-31
展开全部
S位对的 负数是1
阶码部分1010.101 = 1010101*e-3 所以这里应该是124
尾数部分 就是这里的1010101
追问
谢谢你的回答。
不过,尾数不部不是应该规格化为:1-2之间的小数吗?形如x.xxxx。这样最左侧的X肯定为1,就是形如1.xxxx的小数。
以例中1010.101 按照这个说法,是不是应该规格化为:1.010101然后*2^+3。
然你的说法中却将尾数全部规格化为一个整数,与书上的说法不同,这到底是怎么回事呵?(我实在不懂,请祥细解答一下好吗?谢谢!)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-01-31
展开全部
可参考一下IEEE754标准,几句话很难讲清楚。
追问
请不要这样,您愿意帮忙,就解答几句,不愿意就不要出声了。
追答
阶码部分:移码应该是127的偏移而不是128的偏移。
尾数部分:隐含的1就不需要加上了吧。

如果想看到浮点数在内存中的存偖情形的话,好像没有什么好的办法,可以有char*指向浮点数的地址,可以逐字节查看,这个我试过,是可以看到的,不过要注意大端小端的存储顺序会不一样,要看的具体的PC配置了。

如果你在windows上跑的话,应该是小端,也就是存储顺序是倒过来的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式