如果我想使用
std::int32_t small = std::numeric_limits<std::int32_t>::min();
这使得
small
等于 -2147483648。
我在一家图书馆工作,那里有拼写出这些数字。因此最好写成
std::int32_t small = -2147483648;
我在 Visual Studio 上遇到了问题,但是当我阅读 C++ 规范时,我发现它表明我无法对任何编译器执行此操作。我认为我不能这样做的原因是规范表明整数文字不包含负号。负号实际上后来变成了一元减号。因此,C++ 处理整数文字 2147483648。这个数字太大,无法放入 int 中(假设 int 是 32 位,这是我正在考虑的平台上的),因此它必须是一个 long int (64 位) .
(顺便说一句,这是我在 Visual Studio 上出错的地方。它似乎将 2147483648 视为无符号长整型,而不是有符号长整型,但这个问题与规范行为有关)
据我所知,无法将 32 位数字 -2147483648 写为 32 位文字。您必须首先将其设为 64 位文字 2147483648UL,然后将其取反。这看起来像是一个疏忽,但它似乎也可以在任何地方编译(除了 Visual Studio),那么我错过了什么?