打印
[PIC®/AVR®/dsPIC®产品]

PICC编译器乘法运算数据类型的疑惑

[复制链接]
1297|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
micjhon|  楼主 | 2017-9-8 12:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
型号PIC16F1829
编译器PICC-V9.83

unsigned long temp;
unsigned int aaa;

temp = 1600*aaa;  // aaa变量是传递进来的,范围 0~4000

结果 temp的值是一个不确定的 unsigned int 类型。多出检查后无果,然后换了种写法

temp = (unsigned long)aaa*1600;  // aaa变量是传递进来的,范围 0~4000

这样表达就正常了。PICC编译器严格到这种程度吗?PICC手册中我也没有找到相关说明,哪位道友详细指点一下!
沙发
郑朝清| | 2017-9-8 22:42 | 只看该作者
数据类型不一样能直接乘?

使用特权

评论回复
板凳
micjhon|  楼主 | 2017-9-9 12:16 | 只看该作者
郑朝清 发表于 2017-9-8 22:42
数据类型不一样能直接乘?

可以啊,编译器会自动转换数据类型,例如uchar转换成uint再运算
unsigned char a,b;
unsigned int c;
c = a*b;

运算结果是没问题的

使用特权

评论回复
地板
kingkits| | 2017-9-15 10:47 | 只看该作者
对于pic芯片来说,最好不要做这种不同类型的数据计算,因为结果可能因为系统优化的原因变得飘忽不定

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
micjhon + 1 赞一个!
5
micjhon|  楼主 | 2017-10-10 08:21 | 只看该作者
kingkits 发表于 2017-9-15 10:47
对于pic芯片来说,最好不要做这种不同类型的数据计算,因为结果可能因为系统优化的原因变得飘忽不定
...

应该是编译优化的问题,函数运算最好还是都加上数据类型强制转换的好,PICC这点没keil方便

使用特权

评论回复
6
兰天白云| | 2017-10-12 16:21 | 只看该作者
编译器比较傻

使用特权

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

本版积分规则

2

主题

5

帖子

0

粉丝