为什么计算的结果不对
用的是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)。
这是什么原因嘞?
为什么计算的结果不对
编译器问题tmp = (2000-1000);tmp *=2999;
tmp /=1000;
这样就可以了
应该是因为(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]