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
// 十进制转十六进制