打印

51单片机的奇葩问题。。。。

[复制链接]
1300|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leifukes|  楼主 | 2014-4-26 19:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
望断云山| | 2014-4-26 20:18 | 只看该作者
这个应该是跟编译器生成的乘除法代码有关,而跟单片机无关吧

使用特权

评论回复
板凳
blust5| | 2014-4-27 09:07 | 只看该作者
本帖最后由 blust5 于 2014-4-27 09:09 编辑

这个跟运算时的数制转换有关,第二个因为后面你用的是0.1  0.01等数,是浮点型数据,因此计算时全部转换为浮点型计算,不会丢掉位数。第一个都是整型,计算时是用整型数据计算的,特别是第二步 x/1000这个算式,数据就是在这里丢掉的。可以改成 x/1000.0 试试看,应该就不会丢了。或者你的 x 也定义成double型。

使用特权

评论回复
地板
df_flying| | 2014-4-27 18:09 | 只看该作者
你的x是int类型,他是整数类型定义,不可能有小数位的。你改成double或者float就OK了,int只分配2个字节都存储整型,double他会另分配两个字节存储为小数位。你可以自己看看单片机的数据类型相关的。

使用特权

评论回复
5
leifukes|  楼主 | 2014-4-27 19:42 | 只看该作者
OK,懂了,非常感谢

使用特权

评论回复
6
coody| | 2014-4-27 22:40 | 只看该作者
你的dat[5]定义成unsigned char,还dat[0]*10000,不出错才怪。

使用特权

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

本版积分规则

24

主题

46

帖子

0

粉丝