跳转至

进制转换

参考资料: 进制转换

术语列表

  • 二进制(Binary)
  • 八进制(Octal)
  • 十进制(Decimal)
  • 十六进制(Hex)

二进制的四则运算

  • 加法:0+0=0,0+1=1,1+0=1,1+1=10
  • 减法:0-0=0,1-0=1,1-1=0,10-1=1
  • 乘法:0×0=0,0×1=0,1×0=0,1×1=1
  • 除法:0÷1=0,1÷1=1
JavaScript
1
2
3
4
5
6
7
8
9
// 加法:逢2进1

11 + 11 = 110
1011 + 1110 = 11001

    1011
+   1110
--------
   11001
JavaScript
// 减法:借1当2
// 视频教程:https://www.bilibili.com/video/BV1qD4y1o7be/

 10 -  1 =  1
100 - 10 = 10
100 -  1 = 11
100 - 11 =  1

    (012)
     100
-     11
--------
       1
JavaScript
// 乘法:0乘以任何数都是0,1乘以任何数都是1
// 视频教程:https://www.bilibili.com/video/BV1cK4y1Y72P/

1010 * 101 = 110010

       1010
x       101
-----------
       1010
      0000 
+    1010  
-----------
     110010 
JavaScript
// 除法
// 视频教程:https://www.bilibili.com/video/BV1B5411L7g5/

101010 / 110 = 111

       000111
     --------
110 _| 101010
     - 0     
     --------
       10    
     -  0    
     --------
       101   
     -   0   
     --------
       1010  
     -  110  
     --------
        1001
     -   110
     --------
         0110
     -    110
     --------
            0

使用 JavaScript 内置函数进行进制转换

十进制转其他进制

JavaScript
// (数字).toString(进制数)

// 59.25 转换为二进制
(59.25).toString(2)
// '111011.01'

(59.25).toString(8)
// '73.2'

(59.25).toString(16)
// '3b.4'

其他进制转十进制

JavaScript
1
2
3
4
5
6
7
8
// parseInt(数字, 进制数)

// 二进制数 100101 转换为十进制
parseInt(100101, 2)

// 八进制数 73.2 转换为十进制(忽略了小数点)
parseInt(73.2, 8)
// 59

其他进制转其他进制

先转换为十进制,再转换为其他进制。(推荐使用 Windows 计算器程序员模式)

计算方法

十进制转二进制

JavaScript
// 59.25(10) = 111011.01(2)

// 整数部分
// 使用除法一直除以2并取余,直到商数为0停止,余数从下向上读,就是二进制整数部分数字。
59 / 2 = 29 ... 1
29 / 2 = 14 ... 1
14 / 2 =  7 ... 0
 7 / 2 =  3 ... 1
 3 / 2 =  1 ... 1
 1 / 2 =  0 ... 1

// 小数部分
// 则用其乘2,取其整数部分的结果,再用计算后的小数部分依此重复计算,算到小数部分全为0为止,之后读所有计算后整数部分的数字,从上读到下。 
0.25 * 2 = 0.5
 0.5 * 2 = 1.0

也可以使用计算表列式计算:

十进制 0 1 2 3 4 5 6 7 8 9 10
二进制 0 1 10 11 100 101 110 111 1000 1001 1010
JavaScript
1
2
3
4
5
 59.2510 = 101*10101+1001*10100+10*1010-1+101*1010-2
         = 101*1010+1001+10/1010+101/1010/1010
         = 110010+1001+(10+0.1)/1010
         = 111011+0.01
         = 111011.01

二进制转换十进制

JavaScript
// 100101(2) = 37(10)

// JS 计算2的3次方:
// Math.pow(2, 3) === 8
// 最新语法:
// 2 ** 3 === 8

100101 = 1 * 2**5 + 0 * 2**4 + 0 * 2**3 + 1 * 2**2 + 0 * 2**1 + 1 * 2**0
       = 1*32 + 0 + 0 + 1*4 + 0 + 1
       = 32 + 4 + 1
       = 37

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

JavaScript
// 110101(2) = 65(8) = 53(10)

// 十进制转八进制,和十进制转二进制类似,不过是除以8。
53 / 8 = 6 ... 5
 6 / 8 = 0 ... 6

// 八进制转十进制
65 = 6 * 8**1 + 5 * 8**0
   = 48 + 5
   = 53

// 八进制转二进制,三个二进制位一组,参考下面的表
65(8) = 110 101(2)
17(8) = 001 111(2)

// 二进制转八进制,同样是三位一组(从后往前计数),不够三位在前面补零
101100(2) = 101 100(2) = 54(8)
 10011(2) = 010 011(2) = 23(8)
八进制 二进制
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

TODO: