語法書 / AA 競程語法書 上冊 / 附錄 / D. 資料型態範圍速查表

D. 資料型態範圍速查表

本表先列競程常見的 64-bit Linux OJ 環境;C++ 標準對部分型態只規定最低要求,不保證每個平台都和下表完全一樣。完整規格可查 cppreference 的 fundamental types

型態 位元組 位元數 範圍 備註
char 1 8 -128127 有號整數或 ASCII 字元
unsigned char 1 8 0255 無號整數
short 2 16 -32,76832,767 小型整數(少用)
unsigned short 2 16 065,535 無號小型整數
int 4 32 -2,147,483,6482,147,483,647 約 ±21 億,競程常用
unsigned int 4 32 04,294,967,295 無號整數
long 4 或 8* 32 或 64* 依平台決定 *不同平台差異大,建議用 long long
long long 8 64 -9,223,372,036,854,775,8089,223,372,036,854,775,807 \pm 9 \times 10^{18},競程推薦
unsigned long long 8 64 018,446,744,073,709,551,615 無號長整數
bool 1 8 false(0) 或 true(1) 真假值

競程中的建議:

  • 整數絕大多數用 int,若有溢位風險或題目保證 > 10^9long 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 需要大整數時優先使用