我正在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
知道为什么这样做吗? 我很困惑......谢谢!
答案 0 :(得分:4)
您的变量可能是long
,但您的常量(251
,255
和360
)不是。
它们是int
类型,因此会计算出int
结果,然后将其放入long
变量, 之后任何溢出已经完成损坏。
由于Arduino具有16位int
类型,251 * 255
(64005
)将超过32767
的最大整数,并导致您看到的行为。值64005
在16位二进制补码中为-1531
,当您将其除以360
时,得到的-4.25
将截断为-4
。< / p>
您应该使用long
常量来避免这种情况:
init_H_top = 251L * 255L / 360L;