C++ C++;为简单的数学计算给出错误的输出

C++ C++;为简单的数学计算给出错误的输出,c++,c++14,C++,C++14,因此,我的代码如下所示: unsigned long i=(27984 * 619246) + (1402 * 615589); cout<<" i= "<<i; 正确答案是18192035842。 为什么会发生这种情况?试试这个: #include<iostream> #include <string> using namespace std; int main() { unsigned long long i =

因此,我的代码如下所示:

unsigned long i=(27984 * 619246) + (1402 * 615589);
cout<<" i= "<<i;
正确答案是18192035842。 为什么会发生这种情况?

试试这个:

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

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

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

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

RHS上的术语由于溢出而被截断。在SO中可能存在重复的问题。我认为您的常量默认为有符号整数,因此它溢出了?相关:计算机没有无限内存。为您的目的使用正确类型的内存和正确类型的精度。
无符号长i=(27984*619246)+(1402*615589)
无符号长i=int((int*int)+(int*int))
如果表达式溢出了
int
,则可能会出现问题。RHS上的术语由于溢出而被截断。在SO中可能存在重复的问题。我认为您的常量默认为有符号整数,因此它溢出了?相关:计算机没有无限内存。为您的目的使用正确类型的内存和正确类型的精度。
无符号长i=(27984*619246)+(1402*615589)
无符号长i=int((int*int)+(int*int))
如果表达式溢出了
int
,则可能会出现问题。
warning C4307: '*': signed integral constant overflow