问答

汇集网友智慧,解决技术难题

21ic问答首页 - 为什么计算的结果不对

stc

为什么计算的结果不对

ZhongKP2022-07-12
用的是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)。
这是什么原因嘞?
回答 +关注 15
4167人浏览 2人回答问题 分享 举报
2 个回答
  • 应该是因为(2000-1000)/2999 = 2999000,超出了16位的存储,编译器没有自动转化为u32,要进行手动转化。所以可以这样:
    u32 tmp0;
    u16 tmp;
    tmp0 = (2000-1000);
    tmp0 *= 2999;
    tmp = tmp0/1000;
    或者这样
    tmp = (u32)(2000-1000)*2999/1000;
  • 编译器问题tmp = (2000-1000);
    tmp *=2999;
    tmp /=1000;
    这样就可以了

您需要登录后才可以回复 登录 | 注册