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