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
所以我的代码是这样的:
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