搜索
bottom↓
回复: 3

关于IAR中数据类型转换问题

[复制链接]

出0入0汤圆

发表于 2014-8-4 09:25:30 | 显示全部楼层 |阅读模式
昨天写AD采集显示程序,发现一个问题,现在还没想通
temp = (unsigned long)ADC10_GetValue(1)*(unsigned long)356/(unsigned long)512;
lcd_set_xy(3,5);
Disp_SZ(temp%1000/100);
lcd_set_xy(3,6);
Disp_SZ(temp%100/10);

只有这样写,temp计算的数据才会正确
如果把(unsigned long)ADC10_GetValue(1)前的(unsigned long)去掉,就会丢失数据

另外写成temp = 1023*356/1024;这样会出现警告:
Warning[Pe061]: integer operation result is out of range
相应的,计算结果也不对

是不是IAR默认四则运算的时候是根据第一个变量的格式进行的?如果全为数字,就判断为int型而不是uint型
希望大家多多指教

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-8-4 09:55:37 | 显示全部楼层
temp 你定义的什么类型呀。提示数值越界了。老实点,一步一步的计算吧!能用移动就不要用数学运算了。

出0入0汤圆

发表于 2014-8-4 09:59:38 | 显示全部楼层
常量的类型是能包含该常量的最小的数据类型,所以1023,356,1024都是signed short

出0入0汤圆

发表于 2014-8-4 10:01:03 | 显示全部楼层
temp =ADC10_GetValue(1)*356UL/512;
就可以了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 18:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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