进制转换
参考资料: 进制转换
术语列表
- 二进制(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 |
---|
| // 加法:逢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 |
---|
| // 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 |
---|
| 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: