Skip to content

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

一、进制基本概念

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

二进制一般0b开头,八进制一般数字0开头,十六进制一般0x开头。


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

其他进制转10进制,采用按权相加法,公式如下:

公式: 每位数字 × 进制位权 后求和

  • 位权:从右向左,最低位为 0,依次递增。

我们主要来讲整数的转化:


1. 二进制 → 十进制

从右往左,位权从0依次递增,比如:

0b10 = 0×2⁰ + 1×2¹ = 0 + 2 = 2
0b11 = 1×2⁰ + 1×2¹ = 1 + 2 = 3
0b100 = 0×2⁰ + 0×2¹ + 1×2²= 0 + 0 + 4 = 4
0b101 = 1×2⁰ + 0×2¹ + 0×2² = 1 + 0 + 4 = 5
...

2. 八进制 → 十进制

八进制方法同二进制, 只不过进制变8,即位权的基数变为8

010 = 0×8⁰ + 1×8¹ = 0 + 8 = 8
011 = 1×8⁰ + 1×8¹ = 1 + 8 = 9
...
017 = 7×8⁰ + 1×8¹ = 7 + 8 = 15
020 = 0×8⁰ + 2×8¹ = 0 + 16 = 16
021 = 1×8⁰ + 2×8¹ = 1 + 16 = 17
...

3. 十六进制 → 十进制

十六进制同理:

0x10 = 0×16⁰ + 1×16¹ = 0 + 16 = 16
0x11 = 1×16⁰ + 1×16¹ = 1 + 16 = 17
...
0x19 = 9×16⁰ + 1×16¹ = 9 + 16 = 25 
0x1A = 10×16⁰ + 1×16¹ = 10 + 16 = 26
...
0x1F = 15×16⁰ + 1×16¹ = 15 + 16 = 31
0x20 = 0×16⁰ + 2×16¹ = 0 + 32 = 32
...

扩展:带小数转化

小数点左侧从右向左为 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,其他进制就会在数值末位加1, 比如:2 = 0b10, 3 = 0b11。当数字大于1,就需要进位,所以4 = 0b100

那么如何从10进制转其他进制呢,我们可以采用除基取余法

1. 十进制 → 二进制

不断除以 2,记录余数(逆序读数)。
例:10 → 0b1010


10 ÷ 2 = 5 ··· 0 ↑  
5  ÷ 2 = 2 ··· 1 ↑  
2  ÷ 2 = 1 ··· 0 ↑  
1  ÷ 2 = 0 ··· 1 → 1010

2. 十进制 → 八进制

不断除以 8,记录余数(逆序读数)。
例:1232 → 02320


1232 ÷ 8 = 154 ··· 0 ↑  
154  ÷ 8 = 19  ··· 2 ↑  
19   ÷ 8 = 2   ··· 3 ↑  
2    ÷ 8 = 0   ··· 2 → 2320

3. 十进制 → 十六进制

不断除以 16,记录余数(逆序读数)。
例:2770 → 0xAD2

2770 ÷ 16 = 173 ··· 2 ↑  
173  ÷ 16 = 10  ··· 13 ↑  
10   ÷ 16 = 0   ··· 10 → 0xAD2

扩展: 小数部分 ———— 乘基取整法(顺序)

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

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


四、0~16对照表

十进制 (Decimal)二进制 (Binary)八进制 (Octal)十六进制 (Hexadecimal)
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010

五、编程实现(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