欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用JavaScript将10进制数字转为2进制数字和任意进制数字

程序员文章站 2024-03-18 18:24:10
...

首先我们先看10进制转换为2进制

想要会转换,首先需要理解10进制转换为2进制的规则。

首先,我们可以将10进制数除以2(因为2进制是满2进1),直到结果是0为止,过程中产生的余数排列在一起就是我们需要的2进制数字
可以这样看:

除法 余数
10 / 2 = 5 0
5 / 2 = 2 1
2 / 2 = 1 0
1 / 2 = 0 1

将得到的余数依次放进数组里,为0=>1=>0=>1,但是取出的时候为1=>0=>1=>0
理解了过程之后开始看实现过程:

function decimalToBinary(decNumber) {
      const remStack = []               // 存放得到的余数
      let number = decNumber            // 存放要转换的10进制数字
      let str = ''                      // 最后返回拼接完成的2进制数字
      let rem = null                    // 每次获取到的余数

      while(number > 0) {               // 当最后为0时,说明计算结束
          rem = Math.floor(number % 2)  // 余数 
          remStack.push(rem)            // 把获取到的余数放入数组中
          number = Math.floor(number / 2)  // 每次除2后,重置一下数字,然后进行下一次计算
      }
      while(remStack != '') {            
          str += remStack.pop().toString()      // 这里进行拼接
      }
      return str
  }

以上是10进制转为2进制方法,下面是

10进制转为2-36进制的方法:

function decimalToBinary(decNumber, base) {
    const remStack = []
    const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'      // 按顺序定义需要转换的数字
    let number = decNumber
    let str = ''
    let rem = null

    if(!(base >=2 && base <= 36)) {
        return ''
    }

    while(number > 0) {
        rem = Math.floor(number % base)
        remStack.push(rem)
        number = Math.floor(number / base)
    }
    while(remStack != '') {
        str += digits[remStack.pop()]              // 转换为对应进制的数字,并且进行拼接
    }
    return str
}

以上就是使用JS将10进制转为任意进制的方法,部分代码来自于《学习JavaScript数据结构与算法》一书。