智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2567|回复: 14
打印 上一主题 下一主题

[咨询] 小弟一个简单C语言问题求教!!

[复制链接]

85

主题

877

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7835

活跃会员奖章优秀会员奖章论坛骨干奖章在线王奖章论坛元老奖章

威望
5349
贡献
1386
兑换币
150
注册时间
2012-12-20
在线时间
550 小时
毕业学校
哈尔滨
跳转到指定楼层
1#
发表于 2013-2-16 23:35:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近正在玩STC单片机的AD功能 用C语言写了一下小程序 但是出现的一个问题让我感到很惊讶 特地前来求教
首先vin 与vin1都是float的
但是 这段程序Keil编译没问题 但是实际结果是a有数值 b和c都没有数值

          vin=(result*5)/256;
                temp=vin*100;
                a=temp/100;
                b=(temp/10)%10;
                c=(temp%100)%10;
                display_595_1(1,a);
                display_595(2,b);       
                display_595(3,c);       


我小小改动了一下程序

          vin1=result*5;
          vin=vin1/256;
                temp=vin*100;
                a=temp/100;
                b=(temp/10)%10;
                c=(temp%100)%10;
                display_595_1(1,a);
                display_595(2,b);       
                display_595(3,c);

就是把AD值的计算分成了两步 让我诧异的是这样子分成两步计算 实际结果就是正确的 要是只用一步来计算就会丢失b与c的值 求大侠赐教啊!!!
为什么计算一个值怎么分成两步没有问题 一步就出错呢?????


85

主题

877

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7835

活跃会员奖章优秀会员奖章论坛骨干奖章在线王奖章论坛元老奖章

威望
5349
贡献
1386
兑换币
150
注册时间
2012-12-20
在线时间
550 小时
毕业学校
哈尔滨
2#
 楼主| 发表于 2013-2-16 23:54:10 | 只看该作者
自己坐沙发
回复 支持 反对

使用道具 举报

36

主题

1837

帖子

3

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6375
威望
3368
贡献
1847
兑换币
2326
注册时间
2013-2-3
在线时间
580 小时
3#
发表于 2013-2-17 00:37:45 | 只看该作者
100 100.0  10 10.0
回复 支持 反对

使用道具 举报

36

主题

1837

帖子

3

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6375
威望
3368
贡献
1847
兑换币
2326
注册时间
2013-2-3
在线时间
580 小时
4#
发表于 2013-2-17 00:41:03 | 只看该作者
乘除被优化掉了,用实数写。变量全部改成或强转成浮点型。关掉优化。
回复 支持 反对

使用道具 举报

85

主题

877

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7835

活跃会员奖章优秀会员奖章论坛骨干奖章在线王奖章论坛元老奖章

威望
5349
贡献
1386
兑换币
150
注册时间
2012-12-20
在线时间
550 小时
毕业学校
哈尔滨
5#
 楼主| 发表于 2013-2-17 00:47:11 | 只看该作者
灰原姐姐 发表于 2013-2-17 00:37
100 100.0  10 10.0


回复 支持 反对

使用道具 举报

85

主题

877

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7835

活跃会员奖章优秀会员奖章论坛骨干奖章在线王奖章论坛元老奖章

威望
5349
贡献
1386
兑换币
150
注册时间
2012-12-20
在线时间
550 小时
毕业学校
哈尔滨
6#
 楼主| 发表于 2013-2-17 00:47:33 | 只看该作者
灰原姐姐 发表于 2013-2-17 00:41
乘除被优化掉了,用实数写。变量全部改成或强转成浮点型。关掉优化。

哪里有优化 软件的哪里设置的??
回复 支持 反对

使用道具 举报

1

主题

2067

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5124

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
2752
贡献
898
兑换币
59
注册时间
2012-12-8
在线时间
737 小时
7#
发表于 2013-2-17 09:39:37 | 只看该作者
学习一下
回复 支持 反对

使用道具 举报

36

主题

1837

帖子

3

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6375
威望
3368
贡献
1847
兑换币
2326
注册时间
2013-2-3
在线时间
580 小时
8#
发表于 2013-2-17 11:12:35 | 只看该作者
昨晚用手机打的,没说清楚。
vin=(result*5)/256
被优化为
vin=result(5/256) 注:在数学上此优化是没有问题的

5/256 == 0
所以
。。。

所以你只需要写成
vin=(result*5.0)/256.0
应该就可以了。
回复 支持 反对

使用道具 举报

85

主题

877

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7835

活跃会员奖章优秀会员奖章论坛骨干奖章在线王奖章论坛元老奖章

威望
5349
贡献
1386
兑换币
150
注册时间
2012-12-20
在线时间
550 小时
毕业学校
哈尔滨
9#
 楼主| 发表于 2013-2-17 11:59:07 | 只看该作者
灰原姐姐 发表于 2013-2-17 11:12
昨晚用手机打的,没说清楚。
vin=(result*5)/256
被优化为

恩呢 我改成5.0和256.0的确是没问题了 但是灰原姐姐 如果像你所说被优化成了result* (5/256)     5/256=0 那result*0=0   那不会出现a的值正确的情况啊 按照你的温习应该a也不会出现值 a也应该为0  但实际情况为a有正确的值 b、c不能正常提取  求姐姐再帮忙分析分析呗
回复 支持 反对

使用道具 举报

36

主题

1837

帖子

3

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6375
威望
3368
贡献
1847
兑换币
2326
注册时间
2013-2-3
在线时间
580 小时
10#
发表于 2013-2-17 12:51:34 | 只看该作者
lieklieke 发表于 2013-2-17 11:59
恩呢 我改成5.0和256.0的确是没问题了 但是灰原姐姐 如果像你所说被优化成了result* (5/256)     5/256=0 ...

贴完整代码出来。包括变量申明。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-8 23:05 , Processed in 0.059940 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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