【发布时间】:2020-10-28 17:17:09
【问题描述】:
我是 C++ 新手,如果这听起来像一个愚蠢的问题,我很抱歉。我正在尝试将 64 位最小值(-9223372036854775808)分配给 int64_t(来自 cstdint),但是我收到了当前的错误消息:
main.cpp:5:27: warning: integer literal is too large to be represented in a signed integer type, interpreting as unsigned [-Wimplicitly-unsigned-literal]
int64_t int_64_min = -9223372036854775808;
代码如下:
#include <iostream>
#include <cstdint>
int main() {
int64_t int_64_min = -9223372036854775808;
std::cout << int_64_min << std::endl;
std::cout << INT64_MIN << std::endl;
return 0;
}
我是否遗漏了一些明显的东西?
【问题讨论】:
-
9223372036854775808太大,无法容纳 64 位整数。-是应用于数字的运算符,并不意味着将数字解析为负数。此外,如果这是 C++,那么请从<limits>中获取std::numeric_limits<std::uint64_t>::min()。 -
@AdrianMole 这根本不是真的。后缀在这里无关紧要。 “整数文字的类型是值可以适合的第一个类型,来自类型列表,这取决于使用了哪个数字基数和哪个整数后缀。”请参阅en.cppreference.com/w/cpp/language/integer_literal。这里最小的这种类型是一个无符号的 64 位整数(我之前应该更清楚地说 64 位 signed 整数)
-
请看链接下的表格。如果没有后缀,则列出所有整数类型。
-
(请注意,Java 对整数常量有不同的规则 - 如果您有这样的背景,那么您可能会发现 C++ 规则令人惊讶。最重要的是,欢迎使用 C++!)