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

為什麼編程不統一用十進制?進制選擇的工程考量

     編輯:程式設計綜合問答

核心回答

大多數情況確實用十進制**(因為人類習慣),但特定場景下**十六進制、二進制、八進制更優**,選擇進制的本質是:**信息密度與認知負荷的平衡**。

進制選擇決策矩陣

場景推薦進制理由例子
業務邏輯數值(金額、數量、年齡)十進制人類自然計數,溝通零成本price = 199.99
位操作、標誌位、掩碼十六進制1 hex = 4 bits,直接對應二進制位模式flags = 0x0F; mask = 0xFF00
字節數據、內存地址、顏色值十六進制2 hex = 1 byte,一眼看清字節邊界color = 0xFF8000; addr = 0x7FFF_1234
文件權限、Unix 模式八進制3 bits = 1 oct,rwx 權限組完美映射chmod 0755; mode = 0644
嵌入式寄存器配置十六進制/二進制數據手冊用 hex,逐位配置用 binaryREG = 0x80; // 1000_0000b
網絡協議端口、協議號十進制/十六進制並用知名端口十進制易記,分析封包用 hexport = 80 (0x0050)

經典例子:為什麼 0x0211 比 529 好?

// 十進制 529
int val = 529;  // 你能秒懂這是哪兩個字節嗎?

// 十六進制 0x0211
int val = 0x0211; // 一眼看出:高字節 0x02,低字節 0x11
// 內存佈局(小端序):11 02
// 位模式:0000_0010 0001_0001

十六進制**保留了字節邊界信息**,十進制將其「混淆」為單一數值,導致位級操作時認知負荷劇增。

現代語言的進制字面量支援

// C# / Java / JavaScript / Python / Rust / Go 等
int dec = 100;        // 十進制
int hex = 0xFF;       // 十六進制
int bin = 0b1100100;  // 二進制 (C++14, Java 7, C# 7, Python 3.6+)
int oct = 0o144;      // 八進制 (現代語言統一 0o 前綴)
int hex_with_sep = 0xFF_FF_FF_FF; // 數字分隔符增強可讀性

工程原則

  1. 業務層:十進制,面向人類
  2. 系統層:十六進制,面向機器(字節、位、地址)
  3. 協議層:按 RFC 規定,通常十六進制定義,十進制文檔
  4. 調試輸出:printf("0x%08X", val) 統一十六進制,便於位模式分析

總結

不統一用十進制,是因為**計算機內部是二進制**,十六進制是二進制的**無損壓縮表示**(4:1),完美保留位結構;八進制歷史原因用於 Unix 權限(3:1)。**用對進制,能讓代碼自己解釋自己**——看到 0xFF00 就知是高字節掩碼,看到 0755 就知是 rwxr-xr-x,這才是工程師的浪漫。

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