You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino中整数相乘得到错误结果的问题排查

解决电位器读数乘180后输出负数的问题

问题原因

Arduino 默认的 int 是16位有符号整数,最大值为32767。而电位器的最大模拟读数是1023,1023 × 180 = 184140,这个数值远超出16位int的范围,触发了整数溢出——有符号整数溢出后会绕回负数区间,这就是你看到负数输出的原因。

解决方案

改用更大范围的数据类型(比如long)进行计算,在乘法运算前先将val转换为长整型,避免溢出:

修改后的代码:

#define POTENTIOMETER_PIN A0
int val;

void setup() {
  Serial.begin(9600);
}

void loop()
{
  val = analogRead(POTENTIOMETER_PIN);
  // 先将val转为long类型再执行乘法,避免溢出
  Serial.println((long)val * 180);
  delay(250);
}

如果后续需要计算角度(即除以量程1023),同样要保证计算过程中不会溢出,正确写法如下:

Serial.println((long)val * 180 / 1023);

原理说明

long是32位有符号整数,最大值为2147483647,完全可以容纳1023×180的结果,因此不会出现溢出问题,输出结果会符合预期的0~184140区间。

内容的提问来源于stack exchange,提问作者Fadi EID

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:40:39