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