在 CPP 中否定 INT_MIN
Posted
技术标签:
【中文标题】在 CPP 中否定 INT_MIN【英文标题】:Negating INT_MIN in CPP 【发布时间】:2020-03-12 15:58:44 【问题描述】:我要解决的问题是:
实现
pow(x, n)
,计算x
的幂n
(Leetcode第50题)
我有以下代码:
class Solution
public:
double myPow(double x, int n)
if (n == 0)
cout << "in last";
return 1;
else if (n < 0)
x = 1 / x;
return myPow(x, -n);
else if (n % 2 == 0)
double y;
cout << "in even";
y = myPow(x, n / 2);
cout << "y is ";
cout << y;
return (y * y);
else
cout << "in odd";
double j = myPow(x, n - 1);
cout << "j is ";
cout << x * j;
return (x * j);
;
针对测试用例 x=1.00000
和 n = -2147483648
运行时。我收到错误:
runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself (solution.cpp)
为什么我会得到这个,我该如何解决? TIA
【问题讨论】:
对于典型的2的补码有符号整数类型,最小值的负数不能在该类型的正数范围内表示。 【参考方案1】:如果你想支持-2147483648
,那么你需要使用long long
类型,而不是int
。
如果 int
是 32 位 2 的补码类型,则 2147483648
实际上是 long
或 long long
类型。
在 C++ 中不存在负字面量之类的东西(-2147483648
是一个编译时可评估的常量表达式,由字面量 2147483648
的否定组成),所以 -2147483648
要么是 long
要么是 @987654332 @类型也是。这就是为什么你会经常看到 INT_MIN
被定义为 -2147483647 - 1
。
如果在您的平台上出现上述情况,那么您的代码的行为对于该输入是未定义,因为您正在溢出int
类型。
【讨论】:
以上是关于在 CPP 中否定 INT_MIN的主要内容,如果未能解决你的问题,请参考以下文章
RestAssured API测试框架中的否定断言或否定匹配[关闭]