首页 文章

Arduino的基本数学计算问题

提问于
浏览
1

我正在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 回答

  • 4

    您的变量可能是 long 但是您的常量( 251255360 )不是 .

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

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

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

    init_H_top = 251L * 255L / 360L;
    

相关问题