剑指Offer(第二版)16 - 数值的整数次方:
C++ 中对 int 类型的大负数取相反数时会溢出
错误代码:
// C++
#include <iostream>
using namespace std;
int main() {
int a = -2147483648;
a = -a;
cout << a << endl; // 结果为:-2147483648
int b = -a;
cout << b << endl; // 结果为:-2147483648
system("pause");
return 0;
}
C++ 中 int 类型占 4 个字节,最大取值范围为 -2147483648 ~ 2147483647,所以说,如果直接对 -2147483648 取相反数,就会导致溢出报错,可以采用以下的代码来解决:
// C++
#include <iostream>
using namespace std;
int main() {
int a = -2147483648;
unsigned int b = -a;
cout << b << endl; // 结果为:2147483648
// 不能使用语句:unsigned int a = -a,否则就会报错:"a":重定义;不同的基类型
system("pause");
return 0;
}