D. 資料型態範圍速查表
本表先列競程常見的 64-bit Linux OJ 環境;C++ 標準對部分型態只規定最低要求,不保證每個平台都和下表完全一樣。完整規格可查 cppreference 的 fundamental types。
| 型態 | 位元組 | 位元數 | 範圍 | 備註 |
|---|---|---|---|---|
char |
1 | 8 | -128 到 127 |
有號整數或 ASCII 字元 |
unsigned char |
1 | 8 | 0 到 255 |
無號整數 |
short |
2 | 16 | -32,768 到 32,767 |
小型整數(少用) |
unsigned short |
2 | 16 | 0 到 65,535 |
無號小型整數 |
int |
4 | 32 | -2,147,483,648 到 2,147,483,647 |
約 ±21 億,競程常用 |
unsigned int |
4 | 32 | 0 到 4,294,967,295 |
無號整數 |
long |
4 或 8* | 32 或 64* | 依平台決定 | *不同平台差異大,建議用 long long |
long long |
8 | 64 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
約 \pm 9 \times 10^{18},競程推薦 |
unsigned long long |
8 | 64 | 0 到 18,446,744,073,709,551,615 |
無號長整數 |
bool |
1 | 8 | false(0) 或 true(1) |
真假值 |
競程中的建議:
- 整數絕大多數用
int,若有溢位風險或題目保證 > 10^9 用long long - 無號整數 (
unsigned) 在競程中少用,易出現負數陷阱 - 若要表示「無限大」常用
const long long INF = 1000000000000000000LL;
¶D-1. C++ 標準只保證的最低範圍
下表不是競程常見環境的實際大小,而是 C++ 標準要求的最低能力。它用來提醒你:不要把「常見平台上是 4 bytes」誤以為是語言標準永遠保證。
| 型態 | C++ 標準保證的最低範圍概念 | Level 0 記法 |
|---|---|---|
char |
至少能表示基本字元集;大小定義為 1 byte | 用來存一個字元 |
short |
至少 16 bits | Level 0 幾乎不用 |
int |
至少 16 bits | 競程常見是 32 bits,但標準不只寫死 32 bits |
long |
至少 32 bits,且不小於 int |
平台差異大,競程不建議依賴 |
long long |
至少 64 bits,且不小於 long |
需要大整數時優先使用 |