高级会员
- 积分
- 842
- 金钱
- 842
- 注册时间
- 2021-12-23
- 在线时间
- 202 小时
|
1金钱
在进行STM32的程序编写中,由于需要将一些实型数据储存到STM32的内存当中,实话实说我不会,于是将实型数据转换成无符号整型数据来进行储存,保留四位小数。
该实型数据是由无符号整型数据参与运算得到的
首先的想法是不进行数据类型强制转换,如下:
uint16_t a;
uint16_t b;
a=(100/b)*10000; //(100/b)的值是1多一点
然后我将a值输出发现a=10000,我想不通,感觉是不是没加括号把整体放括号里的原因(根据C的运算规则加不加没影响,菜鸡遇到想不通的总想乱试试来排除),然后就给加了括号等式变成如下:
a=((100/b)*10000); //(100/b)的值是1多一点
结果a输出还是a=10000,然后我就想是不是没进行类型强制转换,然后就把强制转换放整体前面,等式变成如下:
a=(uint16_t)((100/b)*10000); //(100/b)的值是1多一点
结果a输出还是a=10000,然后我进行了断点调试一点点的看,最后发现(100/b)的小数部分是没有的,被舍掉了,然后又给b进行了强制转换,等式变换如下:
a=(uint16_t)((100/(float)b)*10000); //(100/b)的值是1多一点
这下结果终于正常了。按我刚开始的理解,b应该自动转换为float类型(小范围自动转换为大范围类型),很明显我理解错了。哪如果a是float类型的b还需要强制转换为float类型的吗?
|
|