进制转换的那些事儿

1,037 阅读2分钟

总结进制转换的各种情况。注意,字符串类型和数字类型的来回切换。

除了常用的十进制外,js可以直接表示2、8、16进制。

TL;DR

  • console.log( 0b10===2, 02===2, 0x2===2)
    => 均为true
  • 17的二进制是啥
    => (17).toString(2),"10001"
  • 二进制"10001"对应的十进制是啥
    => parseInt('10001',2),17
  • 二进制10001对应的八进制是啥
    => parseInt("10001",2).toString(8),"21"
  • 都知道的话,就不用往下看了

进制的数字格式

二进制 - 0b 开头

var x = 0b10
// 2
console.log(x)

八进制 - 0 开头

var x = 010
// 8
console.log(x)

十进制 - 没啥开头

var x = 10
// 10
console.log(x)

十六进制 - 0x 开头

var x = 0x10
// 16
console.log(x)

数字转换成任意进制的字符串:Number.prototype.toString

数字类型的可以转化成任意进制的字符串。

mdn的详细解读

numObj.toString([radix]),radix默认值为 10,范围在2-36。

// xTen也可以是0b10001
var xTen = 17
// 转换成2进制 "10001"
var xTwo = (xTen).toString(2)
// 转换成8进制 "21"
var xEight = (xTen).toString(8)
// 转换成16进制 "11"
var xSixteen = (xTen).toString(16)

!!!注意,调用toString是数字类型,返回的是字符串类型

任意进制的字符串转化成相应的数字: parseInt(String,radix)

任意进制的字符串可以显示成正常的数字,比如二进制"10001"表示的实际数字。

mdn的解释

parseInt(string, radix),radix范围在2-36。必须传入。

// xTen也可以是0b10001
var xTen = 17
// 转换成2进制 "10001"
var xTwo = (xTen).toString(2)
// 17,将二进制的字符串,正常表示出来,后面一个参数传入2
var xTenFormat = parseInt(xTwo,2)

!!!注意,parseInt是全局函数,第一个参数是字符串,第二个参数是前面的字符串是几进制的。

引用

浅谈js的数字格式