单片机y=0.09*x-45的数据处理

2020-01-22 12:14发布

本帖最后由 shafei 于 2012-3-29 19:50 编辑

我用单片机处理数据遇到一个不大不小的问题,
有一个公式y=0.09*x-45 其中x是unsigned char型,x的取值范围为[500,2500]我有几个问题
一:这里的y定义成什么类型比较好,float型吗?
二:算出y后,我希望对它四舍五入后,返回一个unsigned char型的数据
我的意思是说:算出y后,四舍五入以后,再让y变成unsigned char型
我举一个例子,假如我算出来y为178.3,我想让它四舍五入后变成178,然后返回unsigned char型的178,如果我算出来的是178.8,我想让他四舍五入后变成179,然后返回unsigned char型的179
大家可以帮帮我吗?我用在舵机角度控制上面
刚才有人提醒因为X是从500到2500,所以X不是uchar,应该定义成uint
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
76条回答
shafei
2020-01-24 10:40
eduhf_123 发表于 2012-3-29 20:25
首先unsigned char型变量的取值范围只有[0, 255],无法存储[500, 2500]的数据,所以x的类型应该是unsigned  ...

等号右边的表达式自动提升到int型进行求值,在赋值的时候会自动截断成unsigned char。
晚辈不理解
y 定义成unsigned char,x定义成unsigned short int
我查看了C语言的书籍,上面写着表达式中出现unsigned short ,short, unsigned char, char型,立即转化为int型,然后用int型参与运算
你说的爬升,就是这个意思,对吗?
但是我又发现了一句话:当双目运算符两边表达式的数据类型不一致时,系统首先把其中较低级类型的操作数转换为与另一个较高类型的操作数相同的数据类型,然后进行运算,计算结果为类型较高的操作数的数据类型
这个地方怎么和公式y=0.09*x-45联系起来思考?
婉谢

一周热门 更多>