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