我正在尝试对以下项进行除法运算:-
#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"。