我正在尝试为一些极端情况编写测试用例。对于type的输入,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;
它输出完全相同的数字!!!因此常数在范围内。
如何解决此错误?
你可以写
int64_t a = -1 - 9223372036854775807LL;
问题是,-
它不是文字的一部分,而是一元减。因此,编译器首先查看9223372036854775808LL
(超出signed的范围int64_t
),然后找到此值的负数。
通过应用二进制减号,我们可以使用两个范围内的文字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句