0

十进制数4294967295等于十六进制0xFFFFFFFF,所以我希望一个文字具有相同的类型,不管它用什么基数表示,然而

std::is_same<decltype(0xFFFFFFFF), decltype(4294967295)>::value; //evaluates false

看来在我的编译器decltype(0xFFFFFFFF)上是unsigned int,而decltype(4294967295)signed long

4

1 回答 1

5

十六进制文字和十进制文字类型的确定与lex.icon 表 7不同

整数文字的类型是表 7 中可以表示其值的相应列表中的第一个。

当十进制文字没有后缀时,列出的类型按顺序排列:

整数
long int
long long int

对于十六进制,按顺序排列的列表是:

int
unsigned int
long int
unsigned long int
long long int unsigned long long int

为什么会存在这种差异?考虑到我们在 C 中也有这个,我们可以查看C99 基本原理文档,它说:

与十进制常量不同,如果在该类型的范围内,八进制和十六进制常量如果在该类型的范围内,则被键入为 unsigned int,因为它们更有可能表示位模式或掩码,通常最好将其视为无符号,而不是“实数”数字。

于 2018-11-11T18:03:29.030 回答