二进制转换方法:
将十进制数字除以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('')
}
总结:
本质都是原始数字除进制取余数,通过余数获取对应进制的编码