Arduino Mega上的奇怪计算

时间:2018-10-21 11:22:43

标签: c++ arduino

看看这个非常基本的Arduino程序:

long pos = 90 * 1023/360;
Serial.println(pos);

它应该显示255,但显示73。我不明白为什么。

该程序在Arduino Mega上运行。

2 个答案:

答案 0 :(得分:1)

由于等号右侧的所有内容均为int大小,因此数学将在int大小的框中完成。第一步是将90 * 1023相乘,结果将溢出int。您必须通过强制编译器使其中一个数字变长来告诉编译器在右侧使用long

long pos = 90L * 1023/360;

答案 1 :(得分:0)

您可以简单地将右侧的一个数字变成一个长数字。

long pos = 90 * 1023L/360;