C核心技术手册(二十)

第三章 常量

C代码中,常量是表示一个固定值的记号,它可能是整型、浮点型、字符、或一个串。一个常量的类型由它的值和记法来决定。

这里讨论的常与混合常量不同,混合常量在C99标准中介绍,它通常是可修改的对象,类似于变量,了解混合常量的详细介绍和特殊操作可参见第五章。

1.1 整型常量

一个整型常量可以以普通的十进制数表示,或者是八进制或十六进制,总之你必须通过前缀指定一个类型。

一个十进制常量以一个非0的数字开始,例如,255

一个以前导0开始的数值被解释为八进制,八进制(8为基数)仅使用数字07。例如,047是一个合法的八进制常量,表示4 * 8 + 7,它与十进制常量39等价。十进制常量255与八进制常量0377 相等。

十六进制常量以前缀0x0X开始,十六进制数字AF可以使用大写或小写。例如,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

你也可以在程序中显式地使用前缀来改变常量的类型,一个带有前缀lL具有类型long(如果有必要,会使用更大的类型,与刚才提及到的层次一致),同样地,带有前缀llLL的常量最少具有类型long long,前缀uU可能用来保证常量具有一个无符号类型。前缀longunsigned可以进行组合,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

你可能感兴趣的:(技术)