来自the standard draft N1256,第6.4.4.1节,第5条:
整数常量的类型是相应列表中可以表示其值的第一个。
从表中可以看出,没有后缀的八进制和十六进制常量将被赋予任何标准整数类型(signed
/ unsigned
和int
/ {{1的最小合适组合}} / long int
)。对于十进制常量,默认情况下仅考虑long long int
类型。
为什么signed
/ u
存在是有道理的;有符号的溢出行为最好与无符号溢出行为不同,UB最坏,所以我想可能有必要在复杂的表达式中指定文字的无符号性。
这为我们留下了U
/ L
和l
/ LL
后缀。它们只能用于选择整数文字类型的下限。在C99中有什么实际意义?