整數型別和常量

有符號整數可以是這些型別(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>,其中包含固定寬度整數的定義。有關更深入的說明,請參閱固定寬度整數示例。