因為 CPU 硬體直接支援:**整數運算**(ALU)、**浮點運算**(FPU/SSE/AVX)、**邏輯/位運算**、**記憶體位址運算**。語言的基本型別本質上是對硬體資料寬度與編碼方式的薄封裝。
| 類別 | 關鍵字 | 大小 (典型 64 位) | 範圍 / 精度 | 備註 |
|---|---|---|---|---|
| 布林 | bool | 1 byte | true/false | 實際佔 1 byte,非 1 bit |
| 整數 (有號/無號) | signed char / unsigned char | 1 byte | -128~127 / 0~255 | 常用於小整數或原始位元組 |
short / unsigned short | 2 bytes | -32,768~32,767 / 0~65,535 | ||
int / unsigned int | 4 bytes | -2,147,483,648~2,147,483,647 / 0~4,294,967,295 | 預設整數型別 | |
long / unsigned long | 4/8 bytes | 視平台(Windows 64 位為 4,Linux 64 位為 8) | **不可假設大小** | |
long long / unsigned long long | 8 bytes | -9.22e18~9.22e18 / 0~1.84e19 | C++11 保證 ≥ 64 位 | |
wchar_t | 2/4 bytes | 0~65,535 / 0~4,294,967,295 | 寬字元,UTF-16/UTF-32 | |
char8_t (C++20) | 1 byte | UTF-8 代碼單元 | ||
char16_t / char32_t (C++11) | 2/4 bytes | UTF-16/UTF-32 代碼點 | ||
| 浮點數 | float | 4 bytes | ~7 位有效數字,範圍 ±3.4e38 | IEEE 754 single |
double | 8 bytes | ~15 位有效數字,範圍 ±1.7e308 | 預設浮點字面值型別 | |
long double | 8/10/16 bytes | 平台相關,通常 ≥ double | x86 常為 80 位擴展精度 | |
| 無值 | void | 0 | 不可實例化 | 用於函數無返回、泛型指標 void* |
signed/unsigned:僅改變解釋方式,**不改變大小**short/long:改變大小(實際大小仍由實現定義)unsigned long long, signed short int 等int 可省略:short == short int, long == long int123 // int 123u // unsigned int 123l // long 123ll // long long 123ull // unsigned long long 3.14f // float 3.14 // double 3.14l // long double 'c' // char L'c' // wchar_t u8"str" // char8_t[] (C++20) u"str" // char16_t[] U"str" // char32_t[]
#include <iostream>
#include <limits>
#include <cstdint>
int main() {
cout << "int: " << sizeof(int) << " bytes, "
<< numeric_limits::min() << " ~ "
<< numeric_limits::max() << '\n';
cout << "double: " << sizeof(double) << " bytes, "
<< "digits10=" << numeric_limits::digits10 << '\n';
// 固定寬度型別 (C++11)
int32_t i32 = 0; // 保證 32 位
int64_t i64 = 0; // 保證 64 位
return 0;
}
long 是 64 位:Windows 64 位下為 32 位,用 int64_t 或 long longchar 有號性未定義:可能是 signed char 或 unsigned char,做算術時明確指定abs(a-b) < epsilonunsigned int + signed int → unsigned,負數變大正數熟悉內建型別大小、範圍、轉換規則,是寫出正確、可移植、高效 C++ 代碼的基石。現代 C++ 偏好使用 <cstdint> 固定寬度型別(int32_t, uint64_t 等)明確表達意圖,避免平台差異。