首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C 語言中的進制系統:二進制、八進制、十進制與十六進制詳解

     編輯:C 語言問答

什麼是進制?

進制是一種計數規則,「逢幾進一」。我們日常使用的十進制逢十進一,符號為 0-9;二進制逢二進一,只有 0 和 1;八進制逢八進一,符號 0-7;十六進制逢十六進一,符號 0-9 加 A-F(代表 10-15)。計算機底層以二進制存儲數據,八進制與十六進制常作為二進制的緊湊表示形式。

C 語言中的進制字面量

進制前綴示例說明
十進制無123默認整型常量
八進制00173以 0 開頭,數字 0-7
十六進制0x 或 0X0x7B數字 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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved