作者:mobiledu2502909493 | 来源:互联网 | 2022-11-30 10:50
十进制数4294967295等于十六进制0xFFFFFFFF,所以我希望文字具有相同的类型,无论它表达的是什么基础,
std::is_same::value; //evaluates false
似乎在我的编译器decltype(0xFFFFFFFF)
上unsigned int
,decltype(4294967295)
是signed long
.
1> Shafik Yaghm..:
十六进制文字和十进制文字类型的确定与lex.icon表7不同
整数文字的类型是表7中相应列表中的第一个,其中可以表示其值.
当没有十进制文字的后缀时,列出的类型按顺序排列:
integer
long int
long long int
对于十六进制,列表顺序为:
int
unsigned int
long int
unsigned long int
long long int unsigned long long int
为什么存在这种差异?考虑到我们在C中也有这个,我们可以查看C99基本原理文档,它说:
与十进制常量不同,如果在该类型的范围内,那么太大而不能成为整数的八进制和十六进制常量将被键入为unsigned int,因为它们更有可能表示位模式或掩码,通常最好将其视为无符号,而不是"真实" "数字.