整数类型和常量

有符号整数可以是这些类型(shortintlong):

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 之外的所有类型,如果省略 signedunsigned 部分,则假定 signed 版本。char 类型构成第三个字符类型,与 signed charunsigned 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。十六进制常量以 0x0X 开始,八进制常量仅以 0 开始。后两者是 signedunsigned,具体取决于值是否符合有符号类型。

/* 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>,其中包含固定宽度整数的定义。有关更深入的说明,请参阅固定宽度整数示例。