响水凹

欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki

用户工具

站点工具


computer:c:tips:integer_constant

整型常量(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中的处理方式都不同。具体规则如下表所示(同组中以从上到下的顺序选择第一个不会溢出的类型):

常量 Traditional C C89 C99
dd…d int int int
long long long
unsigned long long long
0dd…d
0Xdd…d
unsigned int int
long unsigned unsigned
long long
unsigned long unsigned long
long long
unsigned long long
dd…dU
0dd…dU
0Xdd…dU
unsigned unsigned
unsigned long unsigned long
unsigned long long
dd…dL long long long
unsigned long long long
0dd…dL
0Xdd…dL
long long long
unsigned long unsigned long
long long
unsigned long long
dd…dUL
0dd…dUL
0Xdd…dUL
unsigned long unsigned long
unsigned long long
dd…dLL long long
0dd…dLL
0Xdd…dLL
long long
unsigned long long
dd…dULL
0dd…dULL
0Xdd…dULL
unsigned long long

如果常量的值超过了组内最大类型可表示的值,则结果是未定义(undefined)的。C99允许实现在保持符号性的前提下,可以选择一个扩展的类型(如果存在的话)。

需要注意0开头的是八进制而不是十进制数的情况。有时为了对齐格式,可能无意间将十进制数写成了八进制数,如:

struct {
        int part_number;
        char *description;
} parttab[] = {
        046, "left-handed widget",
        047, "right-handed widget",
        ...
        125, "framins"
};
computer/c/tips/integer_constant.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1