打印

PIC计算出错

[复制链接]
2207|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
goothin|  楼主 | 2007-5-17 16:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pic, pi, ic
计算一个变量值为24*常量2400时为正常
当变量为48*常量2400时就出错
后来只好分两步计算即变量48*40后再*60又正常可以用了
沙发
兰天白云| | 2007-5-17 20:31 | 只看该作者

有点BUG?

使用特权

评论回复
板凳
xieyuanbin| | 2007-5-18 21:54 | 只看该作者

程序绝对有误.

这种问题不该发生的.

使用特权

评论回复
地板
xwj| | 2007-5-18 22:00 | 只看该作者

检查你的数据类型,很可能是溢出了

使用特权

评论回复
5
平常人| | 2007-5-18 22:58 | 只看该作者

24*2400=57600=E100H, 48*2400=115200=1C200H, 显然16位数据溢出

使用特权

评论回复
6
goothin|  楼主 | 2007-5-21 18:12 | 只看该作者

回楼上,不是溢出的问题。

我的数据类型是长整型,什么可能溢出呢!

define a 2400;
unsigned int  b;
unsigned long c;

b=24;
c=b*a;  //运算正确
b=48;
c=b*a;  //运算出错

define a 40;
unsigned int  b;
unsigned long c;

b=48;
c=b*a;
c=c*60;   //运算正确  

那分两步运算40*60*48=115200=1C200H 也是一样的,都可以
肯定是PIC运算的问题,有兴趣的朋友可以试一下,软件仿真就能有效果。

使用特权

评论回复
7
goothin|  楼主 | 2007-5-23 09:43 | 只看该作者

应该划这样的

要结果是32位,两个乘数也要求是32位

使用特权

评论回复
8
xieyuanbin| | 2007-5-23 10:49 | 只看该作者

本来就规定运算时数据类型要一致.

长整型和长整型运算.整型和整形运算.
你不能把浮点数和有符号数拿去运算吧?
实际上在C编译器中,为了节省资源,往往把运算结果放在操作数中的一个中,所以要求你的运算数据类型要一致.

使用特权

评论回复
9
bolofeng| | 2007-5-23 12:44 | 只看该作者

应该这样

define a 2400;
unsigned int  b;
unsigned long c;

b=24;
c=b*a;  //运算正确
b=48;
c=(unsigned long) b * a;  //运算出错

使用特权

评论回复
10
goothin|  楼主 | 2007-5-24 10:12 | 只看该作者

受教了

使用特权

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

本版积分规则

19

主题

83

帖子

0

粉丝