Math Arduino的基本数学计算问题
我在Arduino做一个基本的手术,出于某种原因(这就是我需要你的原因),它给了我一个完全不合适的结果。代码如下:Math Arduino的基本数学计算问题,math,arduino,arduino-uno,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 知道为什么会这样吗? 我很困惑。。。谢谢 变量可能是长的,但常量(251、255和360)不是 它们是int类型
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
知道为什么会这样吗?
我很困惑。。。谢谢 变量可能是长的
,但常量(251
、255
和360
)不是
它们是int
类型,因此将计算得出int
结果,然后在溢出造成损坏后,将其放入long
变量中
由于Arduino有一个16位的int
类型,251*255
(64005
)将超过最大整数32767
,并导致您看到的行为。值64005
是16位2的补码中的-1531
,当您将其除以360
时,大约得到-4.25
,截断为-4
您应该使用long
常量来避免这种情况:
init_H_top = 251L * 255L / 360L;
变量可能是长的
,但常量(251
、255
和360
)不是
它们是int
类型,因此将计算得出int
结果,然后在溢出造成损坏后,将其放入long
变量中
由于Arduino有一个16位的int
类型,251*255
(64005
)将超过最大整数32767
,并导致您看到的行为。值64005
是16位2的补码中的-1531
,当您将其除以360
时,大约得到-4.25
,截断为-4
您应该使用long
常量来避免这种情况:
init_H_top = 251L * 255L / 360L;
回答得好!我一直在期待类似的事情——这让我很不安!:)回答得好!我一直在期待类似的事情——这让我很不安!:)