在C代码中,常量是表示一个固定值的记号,它可能是整型、浮点型、字符、或一个串。一个常量的类型由它的值和记法来决定。
这里讨论的常与混合常量不同,混合常量在C99标准中介绍,它通常是可修改的对象,类似于变量,了解混合常量的详细介绍和特殊操作可参见第五章。
一个整型常量可以以普通的十进制数表示,或者是八进制或十六进制,总之你必须通过前缀指定一个类型。
一个十进制常量以一个非0的数字开始,例如,255。
一个以前导0开始的数值被解释为八进制,八进制(以8为基数)仅使用数字0到7。例如,047是一个合法的八进制常量,表示4 * 8 + 7,它与十进制常量39等价。十进制常量255与八进制常量0377 相等。
十六进制常量以前缀0x或0X开始,十六进制数字A到F可以使用大写或小写。例如,0xff,0Xff,0xFF,这些均表示同一个十六进制常量,其值与十进制常量255相等。
因为你定义的整型常量最终将被用于表达式和声明中,它们的类型很重要,常量的类型在它的值被定义的同时已经确定下来,例子中的整型通常具有int类型。然而,如果一个整型的值超出int类型的范围,这时,它必须使用一个更大的类型,既然这样,编译器在分配它时会有层次地首先使用一个足够大的类型来表示此值。例如,十进制常量类型层次如下:
Int, long, long long
对于八进制和十六进制常量,其类型层次是:
Int, unsigned int, long, unsigned long, long long, unsigned long long
例如,在一个16位的系统上,整型常量50000使用的类型是long,因为此系统上int的最大值为32,767,或者215 – 1。
你也可以在程序中显式地使用前缀来改变常量的类型,一个带有前缀l或L具有类型long(如果有必要,会使用更大的类型,与刚才提及到的层次一致),同样地,带有前缀ll或LL的常量最少具有类型long long,前缀u或U可能用来保证常量具有一个无符号类型。前缀long和unsigned可以进行组合,Table 3-1给出了一些例子。
Table 3-1. Examples of constants with suffixes
整型常量 |
类型 |
0x200 |
int |
512U |
unsigned int |
0L |
long |
0Xf0fUL |
unsigned long |
0777LL |
long long |
0xAAAllu |
unsigned long long |