十进制转二进制

十进制转二进制的方法

  1. toString()方法

toSrting()方法可把一个 Number 对象转换为一个字符串
NumberObject.toString(radix); radix为可选参数,表示数字的基数,把radix设为2,即可得到二进制的字符串。

  1. 除2取余法
  • 题目1
    获取数字 num 二进制形式第 bit 位的值。注意:
    1、bit 从 1 开始
    2、返回 0 或 1
    3、举例:2 的二进制为 10,第 1 位为 0,第 2 位为 1
    示例
//输入
128, 8
//输出
1

方法一
利用除2取余法得到数字num二进制的字符串,此方法得到的字符串正好是反转的二进制字符串,所以直接取bit位的值即可。

function valueAtBit(num, bit) {
    var num2 = [];
    while(num !== 0){
        num2.push(num%2);//取余
        num = parseInt(num/2);//取整
    }
    return num2[bit-1];
}

方法二
利用num.toString()方法得到数字num的二进制字符串,bit位置是从后往前取的,所以length-bit才是字符串从前往后取的位置。

function valueAtBit(num, bit) {
    var num2 = num.toString(2);
    return num2[num2.length-bit];
}
valueAtBit(128, 8);
  • 题目2
    将给定数字转换成二进制字符串。如果字符串长度不足 8 位,则在前面补 0 到满8位。
示例
//输入
65
//输出
01000001

方法一
先用num.toString()方法将数字num转换为二进制的字符串,再用while语句判断其长度有没有超过8,大于8就直接输出结果,小于8就在字符串前加’0’,直到为长度为8再输结果。

function convertToBinary(num) {
    var str = num.toString(2);
    while(str.length<8){
        str = '0' + str;
    }
    return str;
}

方法二
先用num.toString()将数字num转换为二进制的字符串str,从一个长度为8的字符串’00000000’中截取出一部分,以str的长度为截取的开始下标,当str的长度大于8则截取的字符串为空,若小于8则截取出的字符串+二进制字符串的长度刚好为8。

function convertToBinary(num) {
    var str = num.toString(2);
    return '00000000'.slice(str.length)+str;
}

二进制转十进制

二进制转十进制的方法

  1. parseInt(Number, 2)
    直接求出Number的十进制。
  2. 将二进制字符串转换为数组进行计算,十进制用(整数)二进制用数值乘以2的幂次依次相加。

题目描述
给定二进制字符串,将其换算成对应的十进制数字。
示例

//输入
'11000000'
//输出
192

方法一
直接使用parseInt()方法转换。

function base10(str) {
    return parseInt(str,2);
}

方法二
先将二进制字符串转换为数组,再进行遍历计算十进制。

function base10(str) {
	//直接输出的方法
	//return str.split('').reverse().reduce((sum,e,i) => sum += e*Math.pow(2,i),0);
	//转化为数组,然后遍历计算的方法
    var num10 = 0;
    var arr = str.split('');
    var len = arr.length;
    for(let i=0; i<len; i++){
        num10 += arr[i]*Math.pow(2,len-i-1);
    }
    return num10;
}