Arduino计算错误 - 不应该时给出负值
Arduino computing error - giving negative values when it shouldn't
我有一个简单的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
为什么我会遇到此计算错误?我该如何解决?预先感谢
您有一个整数溢出。Arduino上的int是16位,这意味着它的范围为-32,768至32,767。
https://www.arduino.cc/reference/en/language/variables/data-types/int/
这是一个溢出错误。尝试使用long long
或更大范围的其他内容。Arduino int
等于short
,因此我建议使用long
或long long
。正如Bennji正确说的那样,该范围从-32768到32767,适用于正常C 编译器的A short
。
也可以先分开然后乘。
相关文章:
- 条件断点在不应该触发时触发
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我不应该把所有东西都放在标题中?
- 找不到 QRegularExpression 行为的任何解释。它有效,但不应该
- 在清除 istream 之前,我不应该需要取消获取它吗?
- c++ 为什么我不应该从不同的线程解锁互斥锁
- "typename"不应该只在模板函数或模板类中使用吗?
- 为不应该获得未定义行为的内容获取未定义的行为
- 两种情况下的输出不应该相同吗?
- 默认情况下,"std::shared_ptr"不应该使用"std::d efault_delete"吗?
- 错误代码 E0065 和 E0169 不应该有
- 矢量的值在不应该更改时更改
- 保证复制省略不应该适用吗?
- 不应该禁止访问私有类型吗?
- 使用匿名命名空间中的函数或另一个文件中的静态函数不应该出错吗?
- NRVO不应该保证局部命名变量和调用站点变量采用相同的地址吗?
- 类的私有成员在我的类实例化期间更改,即使他们不应该
- 为什么'system'不应该在 Windows 特定的应用程序中使用
- Arduino计算错误 - 不应该时给出负值
- if 语句在应该计算 TRUE 时不计算 TRUE