进制转换

134 阅读3分钟

js的进制转换

Number.prototype.toString()

Number重写了Object原型上的toString()方法,可以用来将10进制数转为其它进制的数。

js
 代码解读
复制代码
console.log((10).toString(9));//10进制转9进制
console.log((171015).toString(16));//10进制转16进制
console.log((33353630).toString(36));//10进制转36进制
console.log((1).toString(37));//报错,最多36进制

parseInt(str, radix)

用来将字符串转换为10进制的数,其中字符串是2-36进制的数。

console.log(parseInt(124123, 8));
console.log(parseInt(2135142123, 16));
console.log(parseInt(2135142123, 36));
console.log(parseInt(2135142123, 37));
console.log(parseInt(1323412, 1));
console.log(parseInt(1323412, -1));

radix只能为2-36,为1或者大于36或者负数时,返回NaN。
同时parseInt会读取字符串的前面的数字部分,也就是说:读取到第一个不是数字的字符为止。
若str直接就是数字的话,会先将str转为number类型,再进行转换。

跨越10进制转换

console.log(parseInt(234, 5).toString(36));
console.log(parseInt(234, 26).toString(2));
console.log(parseInt(234, 36).toString(4));

可以链式调用parseInt和toString来直接进行进制转换了。

数学中的进制转换原理

进制介绍

1)二进制:0,1,满 2 进 1 ,以0b或0B开头。

2)八进制:0 - 7,满 8 进 1,以数字0开头。

3)十进制:0 - 9,满 10 进 1。

4)十六进制:0 - 9 和 a - f 或 A - F,满 16 进 1,以0x或0X开头,a-f表示10-15

转换规则

1)任意进制转 十进制 (按权展开求和)

二进制转十进制方法:

从最低位开始,将每个位上的数提取出来,乘以 2 的 位数-1 次方,然后求和。

八进制转十进制方法:

从最低位开始,将每个位上的数提取出来,乘以 8 的 位数-1 次方,然后求和。

十六进制转十进制方法:

从最低位开始,将每个位上的数提取出来,乘以 16 的 位数-1 次方,然后求和。

演示:

0b1101 = 1 * 2 ^ 0 + 0 * 2 ^ 1 + 1 * 2 ^ 2 + 1 * 2 ^ 3
       = 1 + 0 + 4 + 8 = 13
// 二进制转十进制
 
0234 = 4 * 8 ^ 0 + 3 * 8 ^ 1 + 2 * 8 ^ 2
       = 4 + 24 + 128  = 156
// 八进制转十进制
 
0x23B = 11 * 16 ^ 0 + 3 * 16 ^ 1 + 2 * 16 ^ 2
       = 11 + 48 + 512  = 571
// 十六进制转十进制

2)十进制转任意进制

十进制转二进制方法:

将一个数数不断除以 2,直到商为 0 为止,然后将每次得到的余数倒过来,就是对应的二进制数。

十进制转八进制方法:

将一个数数不断除以 8,直到商为 0 为止,然后将每次得到的余数倒过来,就是对应的二进制数。

十进制转十六进制方法:

将一个数数不断除以 16,直到商为 0 为止,然后将每次得到的余数倒过来,就是对应的二进制数。

34 => 0b00100010
// 十进制转二进制
 
34 => 042
// 十进制转八进制
 
34 => 0x22
// 十进制转十六进制