几种进制的相互转换算法
B(Binary)表示二进制,O(Octal)表示八进制,D或者不写表示十进制,H(Hexadecimal)表示十六进制。
其他进制转换为十进制数据
方法:从低位到高位计算,第0位的权值是进制的0次方,第1位的权值是进制的1次方,第2位的权值是进制的2次方,依次递增下去,把最后的结果相加得到的值就是十进制的值了
二进制->十进制
将二进制的(101011)B转换为十进制
(101011)B = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 1*2^5 = 43
八进制->十进制
将八进制的(53)O转换为十进制
(53)O = 3*8^0 + 5*8^1 = 43
十六进制->十进制
十六进制就是逢16进1,十六进制的16个数为0123456789ABCDEF。
将十六进制的(2B)H转换为十进制
(2B)H =11*16^0 + 2*16^1 = 43
十进制转成其它进制
方法:用十进制的数除以进制,余数为该权位上的数,而商继续除以进制,余数又为上个权位上的数,依次除下去,直到商为0为止,最后读数的时候,从最后一个余数开始读,一直读到最前面一位的余数。
十进制->二进制
将十进制的43转换为二进制
第一次:43 / 2 = 21.........1
第二次:21 / 2 = 10.........1
第三次: 10 / 2 = 5..........0
第四次: 5 / 2 = 2...........1
第五次: 2 / 2 = 1...........0
第六次:1 / 2 = 0...........1
所以 43 = (101011)B
十进制->八进制
将十进制的43转换为八进制
第一次:43 / 8 = 5.........3
第二次:5 / 8 = 0..........5
所以 43 = (53)O
十进制->十六进制
十六进制就是逢16进1,十六进制的16个数为0123456789ABCDEF。
将十进制的43转换为十六进制
第一次:43 / 16 = 2.........11
第二次:2 / 16 = 0..........2
所以 43 = (2B)H
其它进制之间的相互转换
二进制->八进制
方法:取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位按权相加,然后按顺序进行排列,小数点位置不变,得到的数字就是我们所求的八进制数。如果向左(向右)取三位后,取到最高(最低)位时候,如果不足三位,可以在小数点最左边(最右边),即整数的最高位(最低点)添0,凑足三位。
将二进制的(11010111.0100111)B转换为八进制的步骤如下:
1. 小数点前111 = 7;
2. 010 = 2;
3. 11补全为011,011 = 3;
4. 小数点后三位010 = 2;
5. 011 = 3;
6. 1补全为100,100 = 4;
读数:从高位到低位,即(11010111.0100111)B = (327.234)O
八进制->二进制
方法:取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置不变。
将八进制的(327)O转换为二进制的步骤如下
1. 3 = 011;
2. 2 = 010;
3. 7 = 111
4. 读数,读数从高位到低位,011010111,即(327) = (11010111)B
二进制->十六进制
方法:取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位按权相加,然后按顺序进行排列,小数点位置不变,得到的数字就是我们所求的十六进制数。如果向左(向右)取四位后,取到最高(最低)位时候,如果不足四位,可以在小数点最左边(最右边),即整数的最高位(最低点)添0,凑足四位。
将二进制的(11010111)B转换为十六进制的步骤如下:
1. 0111 = 7;
2. 1101 = 13 = D;
3. 读数:(11010111)B = (D7)H
十六进制->二进制
方法:取一分四法,即将一位八进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置不变。
将十六进制的(D7)H转换为二进制的步骤如下:
1. D = 1101;
2. 7 = 0111;
3. 读数:(D7)H = (11010111)B
八进制->十六进制
方法:将八进制转换为二进制,然后再将二进制转换为十六进制,小数点位置不变。
将八进制的(327)O转换为十六进制的步骤如下:
1. 3 = 011;
2. 2 = 010;
3. 7 = 111;
4. 此时得到二进制数(011010111)B
5. 0111 = 7;
6. 1101 = 13 = D;
7. 读数:(327)O = (D7)H
十六进制->八进制
方法:将十六进制转换为二进制,然后再将二进制转换为八进制,小数点位置不变。
将十六进制的(D7)H转换为八进制的步骤如下:
1. D = 1101;
2. 7 = 0111;
3. 得到二进制数:11010111;
4. 111 = 7;
5. 010 = 2;
6. 011 = 3;
7. 读数:(D7)H = (327)O;
在JS中如何表示和转换
其他进制转换为十进制数据
// 可以直接用parseInt
let num = parseInt(n1, n2);
// n1: 是需要转换为10进制的数
// n2: 是被转换数据的进制值,如2,8,16等
十进制转成其它进制
// 十进制的数:170 => 十六进制的数:AA
let num1 = parseInt('170'); // 如果这个数是字符串格式的,需要执行这一步
console.log(num1); // 170
// toString里的参数可以是2,8,16等,设置转换10进制数据到对应进制格式
let num2 = num1.toString(16);
console.log(num2); // aa
其它进制之间的相互转换
首先将十六进制的'AA'转为二进制的数据
- 首先将十六进制转换为十进制数据
- 然后再将所得的十进制数据转为二进制数据
- 小结:进制之间的转换都是先将其他进制数据转为十进制,再用转好的十进制数据转为其他进制数据
// 首先将十六进制的数:AA => 十进制的数:170
let num1 = parseInt('AA', 16);
console.log(num1); // 170
let num2 = num1.toString(2);
console.log(num2); // 10101010