小编Jon*_*han的帖子

int16_t如何表示大于32767且不翻转的数字

在 Arduino Uno 上运行的这段代码会打印递增的数字,并按预期从 32767 回绕到 -32768。

int16_t i = 0;

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

void loop() {
  i++;
  Serial.println(i);
}
Run Code Online (Sandbox Code Playgroud)

然而,人们认为在功能上等效的这段代码不断打印超过 200000 个 16 位数字(有符号或无符号)应该能够表示的数字。

void setup() {
  Serial.begin(115200);

  int16_t i = 0;

  while(true) {
    i++;
    Serial.println(i);
  }
}

void loop() {}
Run Code Online (Sandbox Code Playgroud)

Arduino 参考中有关于数据类型的注释/警告int。这有关系吗?

当有符号变量超过其最大或最小容量时,它们就会溢出。溢出的结果是不可预测的,因此应该避免这种情况。溢出的典型症状是变量从最大容量“滚动”到最小容量,反之亦然,但情况并非总是如此。如果您想要这种行为,请使用 unsigned int。

第二个代码片段发生了什么?变量如何明显代表这么大的数字而不滚动?

c++ types arduino

1
推荐指数
1
解决办法
141
查看次数

标签 统计

arduino ×1

c++ ×1

types ×1