====== 整型常量(Integer constant) ====== 整型常量的表现形式有十进制(Decimal)、八进制(Octal)和十六进制(Hexadecimal)。十六进制以0x或0X开头,八进制以0开头,其余为十进制形式。 整型常量可以接后缀,字母l或L表示long型,字母u或U表示无符号(unsigned)整数,C99增加了long long类型,相应的,ll或LL表示long long型。u/U和l/L、u/U和ll/LL可以同时出现,顺序无所谓。 由于小写字母l和数字1很容易混淆,所以建议统一使用大写的L。 整型常量的值总是为正数(在没有发生溢出时),即使常量前面有负号(-),也作为一元操作符对待,而不作为常量的一部分。 整型常量的具体类型依赖于诸多因素,而且在Tradtional C、C89、C99中的处理方式都不同。具体规则如下表所示(**同组中以从上到下的顺序选择第一个不会溢出的类型**): |< 100% 25% 25% 25% 25% >| ^ 常量 ^ Traditional C ^ C89 ^ C99 ^ |//dd...d// |int |int |int | |::: |long |long |long | |::: | |unsigned long |long long | |0//dd...d//\\ 0X//dd...d// |unsigned |int |int | |::: |long |unsigned |unsigned | |::: | |long |long | |::: | |unsigned long |unsigned long | |::: | | |long long | |::: | | |unsigned long long | |//dd...d//U\\ 0//dd...d//U\\ 0X//dd...d//U | |unsigned |unsigned | |::: | |unsigned long |unsigned long | |::: | | |unsigned long long | |//dd...d//L |long |long |long | |::: | |unsigned long |long long | |0//dd...d//L\\ 0X//dd...d//L |long |long |long | |::: | |unsigned long |unsigned long | |::: | | |long long | |::: | | |unsigned long long | |//dd...d//UL\\ 0//dd...d//UL\\ 0X//dd...d//UL | |unsigned long |unsigned long | |::: | | |unsigned long long | |//dd...d//LL | | |long long | |0//dd...d//LL\\ 0X//dd...d//LL | | |long long | |::: | | |unsigned long long | |//dd...d//ULL\\ 0//dd...d//ULL\\ 0X//dd...d//ULL | | |unsigned long long | 如果常量的值超过了组内最大类型可表示的值,则结果是未定义(undefined)的。C99允许实现在保持符号性的前提下,可以选择一个扩展的类型(如果存在的话)。 需要注意0开头的是八进制而不是十进制数的情况。有时为了对齐格式,可能无意间将十进制数写成了八进制数,如: struct { int part_number; char *description; } parttab[] = { 046, "left-handed widget", 047, "right-handed widget", ... 125, "framins" }; {{tag>C语言}}