題目核心:兩個字節(16 位)能表示多少個不同值?
1 Byte = 8 bit
2 Byte = 16 bit
可表示的不同組合數 = 2^16 = 65,536
編碼範圍:0x0000 ~ 0xFFFF(十進制 0 ~ 65,535)
| 概念 | 說明 |
|---|---|
| 碼位 | 字符集中每個字符對應的整數編號 |
| 代碼單元 | 編碼方案中最小存儲單元(UTF-16 為 16 位) |
| BMP (基本多語言平面) | U+0000 ~ U+FFFF,共 65,536 個碼位 |
| 增補平面 | U+10000 ~ U+10FFFF,需 UTF-16 代理對或 UTF-8 4 字節表示 |
❌ 「計算機 32 位,內存 4 GB,所以 Unicode 只有 65535」
✅ 兩者無直接因果關係。Unicode 編碼空間大小由編碼方案位寬決定,而非 CPU 位寬或物理內存。
// Java
System.out.println(Character.MAX_VALUE); // 65535 (char 範圍)
System.out.println(Character.MAX_CODE_POINT); // 1114111 (實際碼位上限)
// Python
print(sys.maxunicode) // 1114111 (窄構建為 65535,寬構建為 1114111)
「萬國碼兩字節只能收錄 65535」本質是 16 位無符號整數範圍 的直接體現。現代系統普遍採用 UTF-8/UTF-16 代理對突破此限制,開發時務必區分 char/code unit 與 code point/rune,避免截斷增補平面字符導致亂碼。