整数类型和常量
有符号整数可以是这些类型(short
、 int
和 long
):
signed char c = 127; /* required to be 1 byte, see remarks for further information. */
signed short int si = 32767; /* required to be at least 16 bits. */
signed int i = 32767; /* required to be at least 16 bits */
signed long int li = 2147483647; /* required to be at least 32 bits. */
Version >= C99
signed long long int li = 2147483647; /* required to be at least 64 bits */
每个有符号整数类型都有一个无符号版本。
unsigned int i = 65535;
unsigned short = 2767;
unsigned char = 255;
对于除 char
之外的所有类型,如果省略 signed
或 unsigned
部分,则假定 signed
版本。char
类型构成第三个字符类型,与 signed char
和 unsigned char
不同,signed
(或 unsigned
)取决于平台。
不同类型的整数常量( 在 C 术语中称为文字 )可以基于它们的前缀或后缀以不同的基础和不同的宽度编写。
/* the following variables are initialized to the same value: */
int d = 42; /* decimal constant (base10) */
int o = 052; /* octal constant (base8) */
int x = 0xaf; /* hexadecimal constants (base16) */
int X = 0XAf; /* (letters 'a' through 'f' (case insensitive) represent 10 through 15) */
十进制常数总是 signed
。十六进制常量以 0x
或 0X
开始,八进制常量仅以 0
开始。后两者是 signed
或 unsigned
,具体取决于值是否符合有符号类型。
/* suffixes to describe width and signedness : */
long int i = 0x32; /* no suffix represent int, or long int */
unsigned int ui = 65535u; /* u or U represent unsigned int, or long int */
long int li = 65536l; /* l or L represent long int */
如果没有后缀,则常量具有适合其值的第一种类型,即大于 INT_MAX
的十进制常量,如果可能,则为 long
,否则为 long long
。
头文件 <limits.h>
描述了整数的限制,如下所示。它们的实现定义值的大小(绝对值)应等于或大于下面所示的值,并使用相同的符号。
宏 | 类型 | 值 |
---|---|---|
CHAR_BIT |
不是位字段的最小对象(字节) | 8 |
SCHAR_MIN |
signed char |
-127 / - (2 7 - 1) |
SCHAR_MAX |
signed char |
+127/2 7 - 1 |
UCHAR_MAX |
unsigned char |
255/2 8 - 1 |
CHAR_MIN |
char |
见下文 |
CHAR_MAX |
char |
见下文 |
SHRT_MIN |
short int |
-32767 / - (2 15 - 1) |
SHRT_MAX |
short int |
+32767/2 15 - 1 |
USHRT_MAX |
unsigned short int |
65535/2 16 - 1 |
INT_MIN |
int |
-32767 / - (2 15 - 1) |
INT_MAX |
int |
+32767/2 15 - 1 |
UINT_MAX |
unsigned int |
65535/2 16 - 1 |
LONG_MIN |
long int |
-2147483647 / - (2 31 - 1) |
LONG_MAX |
long int |
+2147483647/2 31 - 1 |
ULONG_MAX |
unsigned long int |
4294967295/2 32 - 1 |
Version >= C99
宏 | 类型 | 值 |
---|---|---|
LLONG_MIN |
long long int |
-9223372036854775807 / - (2 63 - 1) |
LLONG_MAX |
long long int |
+9223372036854775807/2 63 - 1 |
ULLONG_MAX |
unsigned long long int |
18446744073709551615/2 64 - 1 |
如果在表达式中使用 char
类型的对象的值,则 CHAR_MIN
的值应与 SCHAR_MIN
的值相同,CHAR_MAX
的值应与 SCHAR_MAX
的值相同。如果 char
类型的对象的值在表达式中使用时没有符号扩展,则 CHAR_MIN
的值应为 0,CHAR_MAX
的值应与 UCHAR_MAX
的值相同。
Version >= C99
C99 标准添加了一个新头文件 <stdint.h>
,其中包含固定宽度整数的定义。有关更深入的说明,请参阅固定宽度整数示例。