即使使用`unsigned long`,C ++中的整数溢出

时间:2019-04-22 10:17:33

标签: c++

我正在尝试使用C ++为我计算一个数字,但是我得到了错误的答案。我认为这可能与数据类型有关?

我试图在相乘之前很长时间将所有数字转换为无符号,但是结果是相同的。


#include <iostream>
using namespace std;

   int main()
   {
    unsigned int width = 8864;
    unsigned int height = 5288;
    unsigned int NImg = 50;
    unsigned long TotalBytes;

    TotalBytes = (width * height * NImg + 2 ) * 2;

    cout<<TotalBytes<<endl;

    }

TotalBytes应该计算为4687283204,但是c ++代码却给我392315908。

非常感谢您

2 个答案:

答案 0 :(得分:2)

您平台上的unsigned long也是32位,就像unsigned int一样。这还不足以存储计算结果。您必须使用unsigned long long,或者,如果需要,可以使用uint64_t

#include <iostream>
#include <cstdint>
using namespace std;

int main()
{
    uint64_t width = 8864;
    uint64_t height = 5288;
    uint64_t NImg = 50;
    uint64_t TotalBytes;

    TotalBytes = (width * height * NImg + 2 ) * 2;

    cout<<TotalBytes<<endl;

}

答案 1 :(得分:-1)

尝试使用Big Integer。您可以创建一个类或使用某人的库来实现它。例如,http://www.cplusplus.com/forum/general/108176/