当 int 溢出时
本课属于 Coddy Arduino 学习旅程的“初识电路”单元。第 12 课,共 22 课。
变量存储在固定数量的位中。位是电路板内存中微小的开关,只有开和关两种状态。在 Uno 上,int 有 16 位,因此只能存储 -32,768 到 32,767 之间的数字。
超过上限后,数值不会继续增大,而是绕回下限。32,767 加 1 会变成 -32,768。这称为溢出,而且草图不会发出警告。
要存储更大的数字,请使用位数更多的数据类型:
long big = 100000; // -2,147,483,648 到 2,147,483,647
unsigned long huge = 3000000000; // 0 到 4,294,967,295long 有 32 位。unsigned long 也有 32 位,但不能存储负数,因此上限是前者的两倍:适合存储计数和时间。
long 占用的内存是 int 的两倍,而 Uno 只有 2048 字节的变量存储空间,因此数字较小时请使用 int。
挑战
中等起始代码每秒将 count 增加 20 次,每次增加 1000。点击 运行,观察它在超过 32,000 后变成负数。
- 更改
count的类型,让它可以计数到超过 100,000
然后点击 检查。
亲手试试
int count = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
count = count + 1000;
Serial.println(count);
delay(50);
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
初识电路中的所有课
自己练习: Arduino 在线编辑器