C ++为简单的数学计算提供错误的输出

C++ Giving wrong output for a simple math calculation

所以我的代码是这样的:

unsigned long i=(27984 * 619246) + (1402 * 615589);
cout<<" i= "<<i;

我不在其他任何地方使用变量 i

输出看起来像这样

 i= 1012166658

正确答案是 18192035842 。 为什么会这样?

试试这个:

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

int main() {
    unsigned long long i = (27984ULL * 619246ULL) + (1402ULL * 615589ULL);
    cout << " i= " << i;
}

使用 long long 文字后缀 LL,并将类型升级为更大的类型即可解决问题。

我使用 U(无符号)文字后缀,以便我们可以将其与结果类型相同。

您的原始代码存在溢出(结果不适合原始类型或运算符),因此它返回了一个截断的版本。我收到的示例编译器警告:

warning C4307: '*': signed integral constant overflow