打印

为什么计算的结果不对

[复制链接]
4193|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZhongKP|  楼主 | 2022-7-12 00:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是STC8A8K64D,定义了一个u16的变量,计算后通过串口发送。
u16 tmp;
tmp = (2000-1000)*2999/1000;
为什么串口发送 tmp 为 0xFFF1。
将 tmp 定义为 u32。
u32 tmp;
tmp = (2000-1000)*2999/1000;
串口发送数据为 0xFFFFFFF1。
再将 tmp 直接赋值为2999000,tmp = 2999000,串口输出数据为 0x2DC2D8(2999000)。
这是什么原因嘞?

使用特权

评论回复

相关帖子

沙发
steelen| | 2022-7-22 12:31 | 只看该作者

为什么计算的结果不对

编译器问题tmp = (2000-1000);
tmp *=2999;
tmp /=1000;
这样就可以了

使用特权

评论回复
板凳
ZhongKP|  楼主 | 2022-7-26 20:16 | 只看该作者
应该是因为(2000-1000)/2999 = 2999000,超出了16位的存储,编译器没有自动转化为u32,要进行手动转化。所以可以这样:
u32 tmp0;
u16 tmp;
tmp0 = (2000-1000);
tmp0 *= 2999;
tmp = tmp0/1000;
或者这样
tmp = (u32)(2000-1000)*2999/1000;

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝