Skip to content

二进制、八进制、十进制、十六进制相互转换

一、进制基本概念

  • 二进制 (Bin) :逢二进一,数码:0, 1
  • 八进制 (Oct) :逢八进一,数码:0-7
  • 十进制 (Dec) :逢十进一,数码:0-9
  • 十六进制 (Hex) :逢十六进一,数码:0-9, A-F(A=10, B=11, ..., F=15)

二、其他进制 → 十进制(按权相加法)

公式:
每位数字 × 进制位权 后求和
位权:小数点左侧从右向左为 0 开始递增;右侧从左向右为 -1 开始递减。

示例:

  1. 二进制 → 十进制
    (101.101)₂ = 1×2² + 0×2¹ + 1×2⁰ + 1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 5.625
  2. 八进制 → 十进制
    (67.35)₈ = 6×8¹ + 7×8⁰ + 3×8⁻¹ + 5×8⁻² = 55.453125
  3. 十六进制 → 十进制
    (1A.08)₁₆ = 1×16¹ + 10×16⁰ + 0×16⁻¹ + 8×16⁻² = 26.03125

三、十进制 → 其他进制

1. 整数部分:除基取余法(逆序)

  • 十进制 → 二进制:不断除以 2,记录余数(逆序读数)。
    例:10 → (1010)₂
    
    10 ÷ 2 = 5 ··· 0 ↑  
    5  ÷ 2 = 2 ··· 1 ↑  
    2  ÷ 2 = 1 ··· 0 ↑  
    1  ÷ 2 = 0 ··· 1 → 1010

2. 小数部分:乘基取整法(顺序)

  • 十进制 → 二进制:不断乘以 2,取整数部分(顺序读数)。
    例:0.125 → (0.001)₂
    
    0.125 × 2 = 0.25 → 取整 0  
    0.25  × 2 = 0.5  → 取整 0  
    0.5   × 2 = 1.0  → 取整 1

注意:整数和小数部分需分开转换,读数方向相反。


四、二进制 ↔ 八进制/十六进制

1. 二进制 → 八进制(三位一组)

  • 小数点向左右分组,每 3 位一组,不足补零。
  • 将每组转换为十进制(即八进制数码)。
    例:(110101)₂ → (65)₈
    
    110 → 6 (4+2),  101 → 5 (4+1) → 65₈
    ``` [[6, 20]]

2. 二进制 → 十六进制(四位一组)

  • 4 位一组,不足补零。
    例:(11101001.1011)₂ → (E9.B)₁₆
    
    1110 → E (14), 1001 → 9, .1011 → B (11)
    ``` [[4, 17]]

3. 八/十六进制 → 二进制(一位分多)

  • 八进制 → 二进制:每位拆成 3 位二进制。
    例:(65)₈ → (110 101)₂ = 110101₂
  • 十六进制 → 二进制:每位拆成 4 位二进制。
    例:(6E.2)₁₆ → (0110 1110.0010)₂(高位零可省略)

五、八进制 ↔ 十六进制

需通过二进制中转


八进制 → 二进制 → 十六进制  
十六进制 → 二进制 → 八进制

例:(1434.55)₈ → 二进制 → (31C.B)₁₆


六、快速参考表(部分对应关系)

二进制八进制十进制十六进制
0000000
0001111
10001088
10101210A
11111715F

七、编程实现(JavaScript示例)

javascript
// 十进制 → 其他进制
let num = 110;
console.log(num.toString(2));   // 二进制: "1101110"
console.log(num.toString(8));   // 八进制: "156"
console.log(num.toString(16));  // 十六进制: "6e"

// 其他进制 → 十进制
console.log(parseInt("101010", 2));  // 42
console.log(parseInt("67", 8));      // 55
console.log(parseInt("1A", 16));     // 26