xzz2021
发布于 2024-02-17 / 2 阅读
0
0

浅析十进制数字转其他进制

二进制转换方法:
将十进制数字除以2,取余数,商如果大于2,则继续除以2取余数,直到最后商为1,除以2,余数必为1,倒序拼接所有余数就是二进制数

例如: 10除2商5余0, 5除2商2余1, 2除2商1余0,1除2商0余1,则最后的二进制为0101的倒序1010
例如: 6除2商3余0,3除2商1余1, 1除2商0余1, 则最后的二进制为011的倒序110

封装函数实现转换:

// 原始实现步骤
function decimalToBinary(decNumber){
    const binaryArr = []  // 存储余数的 数组
    let num = decNumber  //初始数字 及 商
    let rem  // 余数
    while( num > 0){
        rem = Math.floor(num % 2)  // 取余
        binaryArr.push(rem)  // 存储余数
        num = Math.floor(num / 2) // 取商
    }
    return Number(binaryArr.reverse().join(''))
}
// 快速实现
const decToBi = (num) => (num === 0 ? 0 : (num % 2) + 10 * decToBi(~~(num / 2)))

其他进制的转换

封装函数实现转换:

// 原始实现步骤
function baseConverter(decNumber, base){
    const binaryArr = []
    const  digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    let num = decNumber
    let rem
    if(!(base>=2 && base <= 36)) {return ''}
    while(num > 0){
        rem = Math.floor(num % base)
        binaryArr.push(digits[rem])
        num = Math.floor(num / base)
    }
    return binaryArr.reverse().join('')
}

总结:

本质都是原始数字除进制取余数,通过余数获取对应进制的编码


评论