首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++指针解引用乘法

C++指针解引用乘法
EN

Stack Overflow用户
提问于 2015-07-20 09:51:04
回答 1查看 309关注 0票数 0

我目前正在编写一个arduino,并使用C++对象来实现。当我尝试将被指向的值相乘时,我遇到了一个奇怪的问题。参考下面的代码,当我运行程序时,var3和var4最终具有两个不同的值。为什么会这样呢?它们本质上是将相同的值相乘(或者我是这么认为的)。有什么帮助吗?

代码语言:javascript
复制
 long var1 = info->accelXYZ[0];
 long var2 = info->taughtAccelXYZ[0];
 long var3 = var1*var2;

 long var4 = info->accelXYZ[0]*info->taughtAccelXYZ[0];
EN

回答 1

Stack Overflow用户

发布于 2015-07-20 10:04:46

在其中一种情况下,您可能会出现溢出。

var1var2 (都是long)相乘得到一个long,然后将其加载到var3中。

如果info->accelXYZ[0]info->taughtAccelXYZ[0]都为int (例如),则乘法的结果将是int,然后将其加载到long中。

中间int表单可能溢出,您可以在以下代码片段中看到这一点:

代码语言:javascript
复制
#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;
}

以下哪项输出:

代码语言:javascript
复制
int has 4 bytes
long has 8 bytes
var3=-2
var4=4294967294
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31507840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档