智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1523|回复: 5
打印 上一主题 下一主题

51单片机的奇葩问题

[复制链接]

14

主题

28

帖子

0

精华

高级会员

Rank: 4

积分
523
QQ
威望
314
贡献
149
兑换币
132
注册时间
2012-9-21
在线时间
30 小时
跳转到指定楼层
1#
发表于 2014-4-26 19:57:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

unsigned char dat[5]={ 2,4,3,5,6};
int x;
double d;

(第一种)
x = dat[0]*10000+dat[1]*1000+dat[2]*100+dat[3]*10+dat[4];
d = x/1000;
得到 d=24.300 (省略了小数后两位)

(第二种)

d = dat[0]*10+dat[1]+dat[2]*0.1+dat[3]*0.01+dat[4]*0.001;
得到 d=24.356 (正确)

不知道是怎么回事??


回复

使用道具 举报

7

主题

62

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2271
威望
1164
贡献
703
兑换币
674
注册时间
2012-5-24
在线时间
202 小时
2#
发表于 2014-4-26 20:04:49 | 只看该作者
d跟x要同一种数据类型
回复 支持 反对

使用道具 举报

6

主题

308

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1467

活跃会员奖章优秀会员奖章

威望
701
贡献
410
兑换币
428
注册时间
2014-1-6
在线时间
178 小时
3#
发表于 2014-4-26 21:15:35 | 只看该作者
  1. Temporary breakpoint 3, main () at test.c:4
  2. 4           unsigned char dat[5]={2,4,3,5,6};
  3. (gdb) n
  4. 8           x=dat[0]*10000+dat[1]*1000+dat[2]*100+dat[3]*10+dat[4];
  5. (gdb) n
  6. 9           d=x/1000;
  7. (gdb) p x
  8. $5 = 24356
  9. (gdb) n
  10. 10          printf("%f\n",d);
  11. (gdb) p x
  12. $6 = 24356
  13. (gdb) n
  14. 24.000000
  15. 12          d=dat[0]*10+dat[1]+dat[2]*0.1+dat[3]*0.01+dat[4]*0.001;
  16. (gdb)
  17. 13          printf("%f\n",d);
  18. (gdb)
  19. 24.356000
  20. 14      }
  21. (gdb)
复制代码
可以看到d=x/1000;这一步之后,d的值实际是24,这句话是这样执行的,先x/1000得到的是24,因为x为int型,然后将所得值赋值给d,而d是double型,要进行类型转换,就得到了24.0这样的结果

PS:如果有错望指正
回复 支持 反对

使用道具 举报

6

主题

308

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1467

活跃会员奖章优秀会员奖章

威望
701
贡献
410
兑换币
428
注册时间
2014-1-6
在线时间
178 小时
4#
发表于 2014-4-26 21:16:06 | 只看该作者
狂野的庄稼汉 发表于 2014-4-26 21:15
可以看到d=x/1000;这一步之后,d的值实际是24,这句话是这样执行的,先x/1000得到的是24,因为x为int型,然 ...

写错了,d=x/1000;d的实际值为24.0
回复 支持 反对

使用道具 举报

24

主题

260

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2497

活跃会员奖章优秀会员奖章

威望
1181
贡献
786
兑换币
758
注册时间
2014-4-24
在线时间
265 小时
5#
发表于 2014-4-27 19:40:10 | 只看该作者
确实挺奇葩的,就算不同数据类型,也应该得到24.0吧,怎么会是24.300呢?
回复 支持 反对

使用道具 举报

14

主题

28

帖子

0

精华

高级会员

Rank: 4

积分
523
QQ
威望
314
贡献
149
兑换币
132
注册时间
2012-9-21
在线时间
30 小时
6#
 楼主| 发表于 2014-4-27 19:43:57 | 只看该作者
非常感谢,懂了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 21:41 , Processed in 0.050507 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表