所以我按照本教程来熟悉 Arduino。在课程结束时,作者试图通过让我编写一个能够将任何给定 GB 转换为 KB 的程序来测试我对基本数学运算、位和字节的概念以及如何使用适当类型的数据的理解。我认为这是一项简单的任务。但是我想错了。
所以这是我的原始代码:
long drive_gb = 100; //given number
long drive_kb;
void setup()
{
Serial.begin(9600);
Serial.print("Your HD is ");
Serial.print(drive_gb);
Serial.println(" GB large.");
drive_kb = 1024*1024*drive_gb;
Serial.print("It can store ");
Serial.print(drive_kb);
Serial.println(" Kilobytes!");
}
void loop()
{
}
但是当我检查我的串行监视器时,我得到了这个输出:
“你的 HD 有 100 GB 大。它可以存储 0 KB!”
然后我将我的代码修改为:
long drive_gb = 100;
long drive_kb;
long drive_mb;
void setup()
{
Serial.begin(9600);
Serial.print("Your HD is ");
Serial.print(drive_gb);
Serial.println(" GB large.");
drive_mb = 1024*drive_gb;
drive_kb = 1024*drive_mb;
Serial.print("It can store ");
Serial.print(drive_kb);
Serial.println(" Kilobytes!");
}
void loop()
{
}
现在我得到正确的输出
“你的 HD 有 100 GB 大。它可以存储 104857600 KB!”
所以我的问题是:
- 第一个代码是否导致溢出情况?如何?
- 第一个代码在数学上与第二个代码有何不同?
谢谢!