| 類別 | 關鍵字 | 典型大小 | 範圍/精度 | 格式字元 |
|---|---|---|---|---|
| 整數 | char | 1 byte | -128~127 / 0~255 | %c / %hhd |
short / short int | 2 bytes | -32768~32767 | %hd | |
int | 4 bytes | -2147483648~2147483647 | %d | |
long / long int | 4/8 bytes | 同 int 或更大 | %ld | |
long long | 8 bytes | -9e18~9e18 | %lld | |
| 浮點數 | float | 4 bytes | ~7 位有效數字 | %f / %e |
double | 8 bytes | ~15 位有效數字 | %lf (scanf) / %f (printf) | |
long double | 10/16 bytes | 更高精度 | %Lf | |
| 字元 | char | 1 byte | ASCII 0~127 | %c |
| 布林 | _Bool / bool (<stdbool.h>) | 1 byte | 0/1 | %d |
| 空型別 | void | 不可完成型別 | 無值 | 無 |
signed:預設,含負數(int 即 signed int)。unsigned:僅非負,範圍擴大一倍(unsigned int 0~4294967295)。char 是否帶號由實作定義,跨平台請明確寫 signed char / unsigned char。char, short, _Bool、位元欄位、列舉 → int (或 unsigned int)。long double > double > float > unsigned long long > long long > unsigned long > long > unsigned int > int。unsigned 勝過 signed。| 程式碼 | 結果 | 原因 |
|---|---|---|
unsigned int u = 1; int i = -1; u > i | true (1) | i 轉為 unsigned 變巨大正數 |
float f = 1.1; f == 1.1 | false | 1.1 是 double,精度更高 |
char c = 200; printf("%d", c); | -56 (若 char 有號) | 溢位環繞 |
123, 3.14, 'a', "str")、const 修飾變數、enum 列舉常數、#define 巨集。"hello" 型別為 const char[6],儲存在唯讀區,**不可修改**。