Types Arduino溢流
因此,我跟随来熟悉Arduino。在本课结束时,作者试图测试我对基本数学运算、位和字节概念的理解,以及如何使用适当类型的数据,方法是让我编写一个能够将任何给定GB转换为KB的程序。我认为这是一项容易的任务。但我想错了 这是我的原始代码:Types Arduino溢流,types,arduino,overflow,Types,Arduino,Overflow,因此,我跟随来熟悉Arduino。在本课结束时,作者试图测试我对基本数学运算、位和字节概念的理解,以及如何使用适当类型的数据,方法是让我编写一个能够将任何给定GB转换为KB的程序。我认为这是一项容易的任务。但我想错了 这是我的原始代码: long drive_gb = 100; //given number long drive_kb; void setup() { Serial.begin(9600); Serial.print("Your HD is "); Serial
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()
{
}
但当我检查串行监视器时,我得到以下输出:
“您的硬盘容量为100 GB。
它可以存储0千字节!”
然后,我将代码修改为:
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()
{
}
现在我得到了正确的输出
“您的硬盘容量为100 GB。
它可以存储104857600千字节!
"
因此,我的问题是:
谢谢 要得到明确的答案,您需要列出编译器在第一个示例中生成的汇编代码 我的猜测是
X=1024*1024*Y
没有考虑到存储结果需要使用long,而生成的代码使用ints
Try:
X=1024L*1024L*Y编写>并查看是否得到正确答案。要得到明确答案,您需要列出编译器在第一个示例中生成的汇编代码
我的猜测是X=1024*1024*Y
没有考虑到存储结果需要使用long,而生成的代码使用ints
Try:X=1024L*1024L*Y编写>并查看是否得到正确答案。要得到明确答案,您需要列出编译器在第一个示例中生成的汇编代码
我的猜测是X=1024*1024*Y
没有考虑到存储结果需要使用long,而生成的代码使用ints
Try:X=1024L*1024L*Y编写>并查看是否得到正确答案。要得到明确答案,您需要列出编译器在第一个示例中生成的汇编代码
我的猜测是X=1024*1024*Y
没有考虑到存储结果需要使用long,而生成的代码使用ints
Try:X=1024L*1024L*Y编码>并查看您是否得到正确答案。如果您想使用溢出,建议使用诸如MAX_INT(如果可用)之类的常量,或者使用更多特定于系统的类型,如uint32_t,它可以明确地统计可用字节/位的数量。如果您想使用溢出,建议使用常量,如MAX_INT(如果可用),或使用更多系统特定类型,如uint32_t,它可以明确显示可用字节/位的数量。如果要处理溢出,建议使用常量,如MAX_INT(如果可用),或使用更多系统特定类型,像uint32\u t,它可以明确显示可用字节/位的数量。如果你想处理溢出,建议使用诸如MAX\u INT(如果可用)之类的常量,或者依赖更多系统特定的类型,比如uint32\u t,它可以明确显示可用字节/位的数量。
1024*1024*drive\u gb
表示(1024*1024*drive\u gb
,因为根据C标准,乘法是从左到右关联的
1024
表示(int)1024
,因为十进制常量有第一种类型,可以将它们放在其中(int、long、unsigned long)
1024*1024
作为两个整数的乘积,结果也将是一个整数
- 在Arduino平台(实际上是AVR)上,INT是16位的,因此上面的产品溢出
你可以通过写作得到正确的结果
drive_kb = 1024*(1024*drive_gb);
1024*1024*drive\u gb
表示(1024*1024*drive\u gb
,因为根据C标准,乘法是从左到右关联的
1024
表示(int)1024
,因为十进制常量有第一种类型,可以将它们放在其中(int、long、unsigned long)
1024*1024
作为两个整数的乘积,结果也将是一个整数
- 在Arduino平台(实际上是AVR)上,INT是16位的,因此上面的产品溢出
你可以通过写作得到正确的结果
drive_kb = 1024*(1024*drive_gb);
1024*1024*drive\u gb
表示(1024*1024*drive\u gb
,因为根据C标准,乘法是从左到右关联的
1024
表示(int)1024
,因为十进制常量有第一种类型,可以将它们放在其中(int、long、unsigned long)
1024*1024
作为两个整数的乘积,结果也将是一个整数
- 在Arduino平台(实际上是AVR)上,INT是16位的,因此上面的产品溢出
你可以通过写作得到正确的结果
drive_kb = 1024*(1024*drive_gb);
1024*1024*drive\u gb
表示(1024*1024*drive\u gb
,因为根据C标准,乘法是从左到右关联的
1024
表示(int)1024
,因为十进制常量有第一种类型,可以将它们放在其中(int、long、unsigned long)
1024*1024
作为两个整数的乘积,结果也将是一个整数
- 在Arduino平台(实际上是AVR)上,INT是16位的,因此上面的产品溢出
你可以通过写作得到正确的结果
drive_kb = 1024*(1024*drive_gb);
谢谢你的评论!我一直试图通过在命令提示符中使用avr objdump-S来获取汇编代码,但我认为它无法识别该命令。是否有更好的方式查看汇编代码?谢谢您的评论!我一直试图通过在命令提示符中使用avr objdump-S来获取汇编代码,但我认为它无法识别该命令。有b吗