我正在尝试为一些极端情况编写测试用例。对于类型int64_t
的输入,将不会编译以下行:
int64_t a = -9223372036854775808LL;
错误/警告是:
error: integer constant is so large that it is unsigned [-Werror]
我认为电话号码超出范围,所以我尝试了:
std::cout << std::numeric_limits<int64_t>::min() << std::endl;
它输出完全相同的数字!!!因此常数在范围内。
如何解决此错误?
答案 0 :(得分:17)
你可以写
int64_t a = -1 - 9223372036854775807LL;
问题在于-
不是文字的一部分,而是一元减。因此,编译器首先看到9223372036854775808LL
(超出带符号int64_t
的范围),然后找到它的负数。
通过应用二进制减号,我们可以使用两个均在范围内的文字。
答案 1 :(得分:8)
Ben已经解释了原因,这是另外两种可能的解决方案。
尝试一下
int64_t a = INT64_MIN;
或这个
int64_t a = std::numeric_limits<int64_t>::min();