c++ - 为什么整数类型 int64_t 不能持有这个合法值?

标签 c++ c++11 int int64 numeric-limits

<分区>

我正在尝试为一些特殊情况编写测试用例。对于 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(超出有符号 int64_t 的范围),然后找到它的负数。

通过应用二进制减法,我们可以使用两个都在范围内的文字。

关于c++ - 为什么整数类型 int64_t 不能持有这个合法值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57105469/

相关文章:

c++ - QT4:如何从其他类访问 mainwidow 上的对象?

c++ - C++ 构造函数中体系结构 x86_64 的 GCC undefined symbol

c++ - 使用 Boost::Fiber 的多个共享工作池

c - 不了解C中static int的功能

c++ - 将结构的动态数组复制到另一个结构

c++ - 使用 boost 读取执行命令的结果(C++ 库)

c++ - 来自 bitset<n> 的有符号整数

c++ - 在共享内存中移动 boost::interprocess::string

c++ - 我应该在 C++ 中使用 int 还是 long?

python - Codeforces 不接受我的输出,即使它看起来完全一样?