将最小(有符号)32 位数字写入 C++ 文字

问题描述 投票:0回答:0

如果我想使用 标头,那么很容易写出最小的整数:

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),那么我错过了什么?

c++ literals
© www.soinside.com 2019 - 2024. All rights reserved.