Judge the nth bite of a num

问题描述:

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

我的解决方案

受按位与操作的启发,将该数字与2的n次方按位与,结果为0则返回0,否则返回1

1
2
3
4
5
6
7
8
9
10
11
function valueAtBit(num, bit) {
if(bit == 1){
return num%2;
}
var tmp = 1;
while (bit>1){
tmp *= 2;
bit--;
}
return tmp & num ?1:0;
}

其他方案1

toStirng()方法将数字转换为二进制字符串,charAt()函数取字符串的第几个

1
2
3
4
5
function valueAtBit(num, bit) {
var str = num.toString(2);
var chr = str.charAt(str.length-bit);
return parseInt(chr,10);
}

其他方案2

将该数字右移(>>)bit-1位,然后与1按位与

1
2
3
function valueAtBit(num, bit) {
return (num >> (bit -1)) & 1;
}