[PIC单片机] PICC编译器乘法运算数据类型的疑惑

[复制链接]
305|5
 楼主 | 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 | 显示全部楼层
数据类型不一样能直接乘?
 楼主 | 2017-9-9 12:16 | 显示全部楼层
郑朝清 发表于 2017-9-8 22:42
数据类型不一样能直接乘?

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

运算结果是没问题的
| 2017-9-15 10:47 | 显示全部楼层
对于pic芯片来说,最好不要做这种不同类型的数据计算,因为结果可能因为系统优化的原因变得飘忽不定

评分

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

应该是编译优化的问题,函数运算最好还是都加上数据类型强制转换的好,PICC这点没keil方便
| 2017-10-12 16:21 | 显示全部楼层
编译器比较傻
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /6 下一条

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