根据 C++ 文档,保存十六进制文字的大小从
int -> unsigned int -> long -> unsigned long -> long long -> unsigned long.
增长
但我想知道如何指定十六进制文字-2147483648?
这应该是可能的,因为该值可以适合
int
。
但是编译下面的代码会出现以下错误。
一元减运算符应用于无符号类型,结果仍然无符号
#include <iostream>
#include <climits>
int main()
{
std::cout << -0x80000000 << std::endl;
return 0;
}
我可以使用十六进制文字表示的最大负文字是 -0x7fffffff`。
假设您的系统使用 2 的补码来表示负整数值,则对应于
-2147483648
的正确十六进制文字是 0x80000000
。
你不应该像你那样否定它。
以下最小示例演示了它:
#include <iostream>
int main() {
int a = 0x80000000;
std::cout << a << "\n";
}
输出:
-2147483648
默认情况下,不带类型说明符(末尾有“L”或“U”)的数字文字是有符号整数,除非它太大而无法放入有符号整数中。如果它适合无符号整数,则该文字将被视为无符号。如果它不适合有符号或无符号整数,则会出现错误。
文字 0x00000000 到 0x7fffffff 适合有符号整数,因此它们是有符号的。上面的任何文字都不适合有符号整数,因此它被视为无符号。 0x80000000 比 0x7ffffffff 稍高,因此它代表一个 unsigned int。您的编译器告诉您对 unsigned int 取反是没有意义的。