Arduino的基本数学计算问题

时间:2017-03-29 01:27:18

标签: math arduino arduino-uno

我正在Arduino进行基本操作,由于某种原因(这就是我需要你的原因)它给了我一个完全不合适的结果。以下是代码:

long init_H_top; //I am declaring it a long to make sure I got enough bytes
init_H_top=251*255/360; //gives me -4 and it should be 178

知道为什么这样做吗? 我很困惑......谢谢!

1 个答案:

答案 0 :(得分:4)

您的变量可能是long,但您的常量251255360)不是。

它们是int类型,因此会计算出int结果,然后将其放入long变量, 之后任何溢出已经完成损坏。

由于Arduino具有16位int类型,251 * 25564005)将超过32767的最大整数,并导致您看到的行为。值64005在16位二进制补码中为-1531,当您将其除以360时,得到的-4.25将截断为-4。< / p>

您应该使用long常量来避免这种情况:

init_H_top = 251L * 255L / 360L;