我知道标准中说,如果整数文本不适合int,它会尝试无符号int,依此类推,参见标准中表6的2.14.2节。
我的问题是:确定它是否合适的标准是什么?
为什么std::is_signed<decltype(0xFFFFFFFF)>::value
和std::is_signed<decltype(0x80000000)>::value
都给出false
。为什么它们不适合int?CCD_ 4具有与signed -1
signed -2147483648
相同的比特表示。
您不需要查看"比特表示";检查数字是否合适。
假设sizeof(int) == 4
,int
可以表示从-231到232-1的数字。
0x80000000
为231,比最大值大1。
确定它是否适合的标准是什么?
取决于平台和编译器。它们定义了int
有多大。
为什么
std::is_signed<decltype(0xFFFFFFFF)>::value
std::is_signed<decltype(0x80000000)>::value
都给出false。
因为在大多数平台中,0x80000000
和0xFFFFFFFF
将是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英寸不在这个范围内。就这么简单。