C++数据类型范围



我正在尝试对以下项进行除法运算:-

#include <bits/stdc++.h>
using namespace std;
int main(){
int A = -2147483648;
int B = -1;
int C = A/B;
// this is not working
cout<<C<<endl;
// nor this is working
cout<<A/B<<endl;
// But this is working
cout<<-2147483648/-1<<endl; // printing the result 2147483648;
}

我很困惑为什么会发生这种事。请解释。

假设int类型为32位并使用二的补码表示,前两种情况表现出未定义的行为,因为-2147483648-1都适合int,而2147483648不适合。

在第三种情况下,表达式-2147483648/-1包含整数文字2147483648(在被求反之前(,并且具有该值可以适应的第一种类型。在这种情况下,这将是long int。计算的其余部分保持类型,因此不会出现未定义的行为。

您可以将数据类型更改为long-long。long long A = -2147483648;long long B = -1;long long C = A/B;如果您需要分数结果,请尝试"double"而不是"long-long"。

相关内容

  • 没有找到相关文章

最新更新