打印

单片机浮点指针的奇怪现象

[复制链接]
2374|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwh|  楼主 | 2007-9-26 19:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
keil 在作浮点指针的时候,某些现象是比较奇怪的,其实下面遇到的问题也适用于其他的PC系统。
main()
{
    long a = 12345678;
    float b = 0 ;
    float *c ;
    c = (float*)&a;
    b = (float)a;
  // 判断*c是否等于b
}

以上的程序中,b和a的数值一致,而c和a的数值是不一样的!
关于这个问题,其实是一个数值转换的问题,因为浮点数位权不一致,但是c和a中存储的二进制码是一样的。
b和a一样的原因是强制类型转换后,通过算法将定点数转换为相应的浮点值,而b和a存储单元内的二进制码是不一样的。

愚以为此问题为多数编程者所不知,贴出来晒晒。
可以到我的博客来讨论,上面有关于浮点的格式说明。
相关链接:http://http://blog.21ic.com/user1/4346/archives/2007/42326.html

相关帖子

沙发
平常人| | 2007-9-26 20:40 | 只看该作者

关键看你如何做比较判断

使用特权

评论回复
板凳
ayb_ice| | 2007-9-27 07:36 | 只看该作者

c = (float*)&a;这样的转换是达不到效果的...

使用特权

评论回复
地板
HWM| | 2007-9-27 07:49 | 只看该作者

c是a的地址(指针),能和自身值一样吗。

只能对*c和b进行比较。

使用特权

评论回复
5
wwh|  楼主 | 2007-9-27 18:51 | 只看该作者

可能最后写得出了点问题

就是判断*c和b是否相等。

使用特权

评论回复
6
xwj| | 2007-9-27 19:05 | 只看该作者

C语言有一道基本考题:怎样正确书写浮点数的相等判断

使用特权

评论回复
7
wwh|  楼主 | 2007-9-27 21:16 | 只看该作者

咱在这里只讨论*c是否和b相等

数值上因为少许的误差不考虑,就说从程序上,*c是不是等于12345678,或者等于其他什么浮点数?
其实就是说*c会不会等于12345678
b会不会等于12345678

使用特权

评论回复
8
HWM| | 2007-9-27 21:27 | 只看该作者

LS:不一样。

b = (float)a; 含有整数转浮点数的功能,而
c = (float*)&a; 仅传了一个地址。

使用特权

评论回复
9
HWM| | 2007-9-29 11:46 | 只看该作者

LS:你吃准了吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

wwh

11

主题

278

帖子

1

粉丝