首页 > 试题广场 >

二进制转换

[编程题]二进制转换
  • 热度指数:43553 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
获取数字 num 二进制形式第 bit 位的值。注意:
1、bit 从 1 开始
2、返回 0 或 1
3、举例:2 的二进制为 10,第 1 位为 0,第 2 位为 1
示例1

输入

128, 8

输出

1
// FED48二进制转换

// 描述
// 获取数字 num 二进制形式第 bit 位的值。注意:
// 1、bit 从 1 开始
// 2、返回 0 或 1
// 3、举例:2 的二进制为 10,第 1 位为 0,第 2 位为 1

// 示例1
// 输入:
// 128, 8

// 输出:
// 1

function valueAtBit(num, bit) {
    // 解法1 将num转变成二进制字符数组
    let binary = num.toString(2).split("");
    return binary[binary.length - bit];

    // // 解法2 利用位运算符‘&’
    // return num & Math.pow(2,bit-1) ? 1 : 0;

    // // 解法3 与解法2类似,多用一个位运算符“>>”
    // return (num >> (bit-1)) & 1; 
}

发表于 2021-08-10 20:14:41 回复(0)
转2进制,转数组,翻转,取值了。。。看到一楼位操作,膜拜大佬
function valueAtBit(num, bit) {
    return num.toString(2).split('').reverse()[bit-1]
}
发表于 2021-06-01 15:25:15 回复(0)
function valueAtBit(num, bit) {
    return num.toString(2).substr(0-bit,1);
}


发表于 2020-03-25 16:29:12 回复(0)
从原理上进行转化为二进制数字的数组,然后取出对应位的值。
function valueAtBit(num, bit) {
    var temp = []
    var rest = num;
    do{
        temp.push(rest%2);
        rest = Math.floor(rest/2) ;
    }while(rest>=1);
    
    return temp[bit-1];
        
}
发表于 2019-08-19 20:35:16 回复(0)
function valueAtBit(num, bit) {
   return num.toString(2).charAt(num.toString(2).length - bit);
}
发表于 2018-03-14 11:26:14 回复(0)
    function valueAtBit(num, bit) {
        var arr= num.toString(2).split("").reverse();    
      return (  arr[bit-1] );
    }
...发现最后输出的竟然是倒着的位数。。转化二进制之后就倒着,取值
发表于 2018-01-22 21:23:49 回复(0)
function valueAtBit(num, bit) {
	var bin = num.toString(2);
	var binArr = bin.split('');
	return bin[binArr.length-bit];
}

发表于 2017-04-11 16:58:42 回复(0)
function valueAtBit(num, bit) {
	var result = num.toString(2);
    var res = parseInt(result.charAt(result.length-bit));
    return res;
}

测试通过!

发表于 2017-04-10 17:11:51 回复(1)
function valueAtBit(num, bit) {
    var a = num.toString(2);
    var arr = a.split("").reverse();
    return arr[bit-1];
}

发表于 2016-09-22 21:38:31 回复(0)
function valueAtBit(num, bit) {
    var a="";
    var b;
    var c="";
     for(;num!=1;){
         b=num%2;
       a=a+b.toString();
        num=num/2;
    }
    if(num==1){
        a=a+1;
              }
    var res=a.split('');
    for(var i=res.length-1;i>=0;i--){
    c=c+res[i];
    }
    var d=c.split('');
    return (d[bit-1]);
}
发表于 2016-07-26 13:39:40 回复(0)
将1右移bit-1 位,然后与num 按位 与,因为二进制里任何数与1与得到他本身,所以,如果结果为1则表示该位位1,为零则表示该位置为0,其实还有一点没想明白,num && 位移后的1 为什么只通过75%的测试案例/
function valueAtBit(num, bit) {
    if ( bit < 1 ) return -1 ;
     var numT = 1 ;
     numT = numT << (bit -1 ) ;
     if( (num & numT) == 0 ){
         return 0;
     }else{
         return 1 ;
     }
}

发表于 2016-07-20 19:47:47 回复(0)
function valueAtBit(num, bit) {

    var i = num >> (bit-1);
    var a = i&1;
    return a==1?1:0;
    
}

发表于 2016-05-20 23:12:41 回复(0)
function valueAtBit(num, bit) {
//先转换为二进制数组,再进行逆排序
  return  num.toString(2).split('').reverse()[bit - 1];
}
   
发表于 2016-04-06 19:41:31 回复(0)
function valueAtBit(num, bit) {
	var n2b = num.toString(2),
        pos = n2b.length-bit;
    return n2b.charAt(pos);
}

发表于 2016-04-01 16:08:47 回复(0)
function valueAtBit (num, bit) { 
    return num >> (bit -1) & 1;
}

发表于 2015-09-29 17:55:07 回复(0)
function valueAtBit(num, bit) {
var op = 1;
    while(--bit > 0){
        op = op << 1;
    }
    if((num & op) != 0){
        return 1;
    }else{
        return 0;
    }
}
发表于 2015-09-12 21:42:17 回复(0)
   var  temp;
                var myArry=new Array();
                while(num>1)
                {
                    temp=parseInt(num%2);
                    num=parseInt(num/2);
                    myArry.push(temp);
                }
                    myArry.push(num);
                    return myArry[bit-1];
发表于 2015-07-18 16:29:58 回复(0)
function valueAtBit(num, bit) {
    return (num >> (bit -1)) & 1;
}

发表于 2015-11-24 17:33:29 回复(41)
通过num.toString(2)能直接将num转换为2进制数格式的字符串,利用下标就能将对应值取出来。题目返回的数字是从右往左,因此下标为倒数。
function valueAtBit(num, bit) {
  var s = num.toString(2);
     return s[s.length - bit];
 }

编辑于 2015-08-19 10:40:29 回复(19)
qjh头像 qjh
function valueAtBit(num, bit) {
    //toString转化为二进制,split将二进制转化为数组,reverse()将数组颠倒顺序
    var arr = num.toString(2).split("").reverse();
    return arr[bit-1];
}


编辑于 2017-02-24 14:48:34 回复(1)