進制是一種計數規則,「逢幾進一」。我們日常使用的十進制逢十進一,符號為 0-9;二進制逢二進一,只有 0 和 1;八進制逢八進一,符號 0-7;十六進制逢十六進一,符號 0-9 加 A-F(代表 10-15)。計算機底層以二進制存儲數據,八進制與十六進制常作為二進制的緊湊表示形式。
| 進制 | 前綴 | 示例 | 說明 |
|---|---|---|---|
| 十進制 | 無 | 123 | 默認整型常量 |
| 八進制 | 0 | 0173 | 以 0 開頭,數字 0-7 |
| 十六進制 | 0x 或 0X | 0x7B | 數字 0-9、字母 A-F(大小寫均可) |
| 二進制 | 0b 或 0B (C23/C++14 起) | 0b1111011 | 標準 C 早期無此前綴,GCC/Clang/MSVC 作擴展支持 |
printf 格式符:%d(十進制)、%o(八進制)、%x/%X(十六進制小寫/大寫)。scanf 掃描集:%d 十進制、%o 八進制、%x 十六進制,自動識別前綴 0、0x。int value = 123; // 十進制
int oct = 0173; // 八進制,等於 123
int hex = 0x7B; // 十六進制,等於 123
// 二進制字面量(C23 或編譯器擴展)
int bin = 0b1111011; // 等於 123
printf("十進制: %d\n", value);
printf("八進制: %o (帶前綴: %#o)\n", oct, oct);
printf("十六進制: %x (帶前綴: %#x)\n", hex, hex);
十六進制每位對應 4 個二進制位,八進制每位對應 3 位,極適合位運算(&、|、^、~、<<、>>)。例如:
0xFF = 0b11111111,常用作 8 位掩碼。0x0F = 0b00001111,提取低 4 位。010 是八進制(十進制 8),而非十進制 10。0xFFFFFFFFU 明確指定無符號,避免符號擴展問題。%08x 輸出 8 位十六進制,不足前補 0。熟練掌握 C 語言的進制表示與轉換,對於底層開發、嵌入式編程、網絡協議解析、文件格式處理等場景至關重要。十六進制是查看內存、寄存器、位掩碼的首選;八進制常見於 Unix 權限掩碼;二進制直觀展示位模式。善用編譯器警告(-Wconversion 等)可避免隱式進制誤解導致的 Bug。