我目前正在编写一个arduino,并使用C++对象来实现。当我尝试将被指向的值相乘时,我遇到了一个奇怪的问题。参考下面的代码,当我运行程序时,var3和var4最终具有两个不同的值。为什么会这样呢?它们本质上是将相同的值相乘(或者我是这么认为的)。有什么帮助吗?
long var1 = info->accelXYZ[0];
long var2 = info->taughtAccelXYZ[0];
long var3 = var1*var2;
long var4 = info->accelXYZ[0]*info->taughtAccelXYZ[0];发布于 2015-07-20 10:04:46
在其中一种情况下,您可能会出现溢出。
var1和var2 (都是long)相乘得到一个long,然后将其加载到var3中。
如果info->accelXYZ[0]和info->taughtAccelXYZ[0]都为int (例如),则乘法的结果将是int,然后将其加载到long中。
中间int表单可能溢出,您可以在以下代码片段中看到这一点:
#include <stdio.h>
#include <limits.h>
int main(void) {
printf("int has %d bytes\n",sizeof(int));
printf("long has %d bytes\n",sizeof(long));
int a = INT_MAX;
int b = 2;
long var1 = a;
long var2 = b;
long var3 = a * b;
long var4 = var1 * var2;
printf ("var3=%ld\n", var3);
printf ("var4=%ld\n", var4);
return 0;
}以下哪项输出:
int has 4 bytes
long has 8 bytes
var3=-2
var4=4294967294https://stackoverflow.com/questions/31507840
复制相似问题