Arduino计算错误 - 当它不应该给出负值

时间:2017-11-24 04:23:33

标签: c++ math arduino

我有这个简单的Arduino代码:

#define percentage 60
void setup() {
  Serial.begin(9600);
  int seconds = 682;
  Serial.println(seconds);
  Serial.println((seconds * percentage));//Should be 40920
  Serial.println((seconds * percentage) / 100); //Should be 409
}

void loop() {}

当我运行它并打开串行监视器时,它会显示:

  

682

     

-24616

     

-246

但它应该表明:

  

682

     

40920

     

409

为什么我收到此计算错误?我该如何解决?提前谢谢

2 个答案:

答案 0 :(得分:2)

你有一个整数溢出。 Arduino上的int是16位,这意味着它的范围是-32,768到32,767。

https://www.arduino.cc/reference/en/language/variables/data-types/int/

答案 1 :(得分:1)

这是一个溢出错误。尝试使用long long或更大范围的内容。 Arduino int相当于short,因此我建议您使用longlong long。正如Bennji所说,范围从-32768到32767,与普通c ++编译器的short相同。

你也可以先划分然后再乘。