c++如何确定整型文字是否适合int类型



我知道标准中说,如果整数文本不适合int,它会尝试无符号int,依此类推,参见标准中表6的2.14.2节。

我的问题是:确定它是否合适的标准是什么?

为什么std::is_signed<decltype(0xFFFFFFFF)>::valuestd::is_signed<decltype(0x80000000)>::value都给出false。为什么它们不适合int?CCD_ 4具有与signed -1signed -2147483648相同的比特表示。

您不需要查看"比特表示";检查数字是否合适。

假设sizeof(int) == 4int可以表示从-231到232-1的数字。

0x80000000为231,比最大值大1。

确定它是否适合的标准是什么?

取决于平台和编译器。它们定义了int有多大。

为什么std::is_signed<decltype(0xFFFFFFFF)>::valuestd::is_signed<decltype(0x80000000)>::value都给出false。

因为在大多数平台中,0x800000000xFFFFFFFF将是unsigned int,因为它们不适合int

为什么它们不适合int?

因为在大多数平台中,int是32位的,2的补码,这意味着0x7FFFFFFF是最大的int

0xFFFFFFFF是4'294'967'295的十六进制。在sizeof(int) == 4的平台上,int的范围为-2'147'483'648到2'147'483'647。正如你所看到的,4英尺294英寸967英尺295英寸不在这个范围内。就这么简单。

最新更新