PIC计算出错

[复制链接]
 楼主| goothin 发表于 2007-5-17 16:08 | 显示全部楼层 |阅读模式
pic, pi, ic
计算一个变量值为24*常量2400时为正常<br />当变量为48*常量2400时就出错<br />后来只好分两步计算即变量48*40后再*60又正常可以用了
兰天白云 发表于 2007-5-17 20:31 | 显示全部楼层

有点BUG?

  
xieyuanbin 发表于 2007-5-18 21:54 | 显示全部楼层

程序绝对有误.

这种问题不该发生的.
xwj 发表于 2007-5-18 22:00 | 显示全部楼层

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

  
平常人 发表于 2007-5-18 22:58 | 显示全部楼层

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

  
 楼主| goothin 发表于 2007-5-21 18:12 | 显示全部楼层

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

我的数据类型是长整型,什么可能溢出呢!<br />例<br />define&nbsp;a&nbsp;2400;<br />unsigned&nbsp;int&nbsp;&nbsp;b;<br />unsigned&nbsp;long&nbsp;c;<br /><br />b=24;<br />c=b*a;&nbsp;&nbsp;//运算正确<br />b=48;<br />c=b*a;&nbsp;&nbsp;//运算出错<br /><br />define&nbsp;a&nbsp;40;<br />unsigned&nbsp;int&nbsp;&nbsp;b;<br />unsigned&nbsp;long&nbsp;c;<br /><br />b=48;<br />c=b*a;<br />c=c*60;&nbsp;&nbsp;&nbsp;//运算正确&nbsp;&nbsp;<br /><br />那分两步运算40*60*48=115200=1C200H&nbsp;也是一样的,都可以<br />肯定是PIC运算的问题,有兴趣的朋友可以试一下,软件仿真就能有效果。<br />
 楼主| goothin 发表于 2007-5-23 09:43 | 显示全部楼层

应该划这样的

要结果是32位,两个乘数也要求是32位
xieyuanbin 发表于 2007-5-23 10:49 | 显示全部楼层

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

长整型和长整型运算.整型和整形运算.<br />你不能把浮点数和有符号数拿去运算吧?<br />实际上在C编译器中,为了节省资源,往往把运算结果放在操作数中的一个中,所以要求你的运算数据类型要一致.
bolofeng 发表于 2007-5-23 12:44 | 显示全部楼层

应该这样

define&nbsp;a&nbsp;2400;<br />unsigned&nbsp;int&nbsp;&nbsp;b;<br />unsigned&nbsp;long&nbsp;c;<br /><br />b=24;<br />c=b*a;&nbsp;&nbsp;//运算正确<br />b=48;<br />c=(unsigned&nbsp;long)&nbsp;b&nbsp;*&nbsp;a;&nbsp;&nbsp;//运算出错<br />
 楼主| goothin 发表于 2007-5-24 10:12 | 显示全部楼层

受教了

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

本版积分规则

19

主题

83

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部