题目描述
获取数字 num 二进制形式第 bit 位的值。注意:
1、bit 从 1 开始
2、返回 0 或 1
3、举例:2 的二进制为 10,第 1 位为 0,第 2 位为 1
示例1
输入
128, 8
输出
1
我的解答:
function valueAtBit(num, bit) {
var str=num.toString(2);
return str[str.length-bit];
}
利用toString()函数,将数字转化为了二进制字符串,然后字符串长度和位的关系将其取出
其他解答:
function
valueAtBit(num, bit) {
return
(num >> (bit -1)) & 1;
}
利用了移位操作,之前没有接触过这种解法,理解之后感觉相当简洁
以上面的示例分析,128,8-》1;
128->1000 0000;要想将第八位上的数字取出,可以将她移到第一位上,也即是向右移动7位变成0000 0001,怎样将第一位上的1拿出来呢,可以利用与操作,让0000 0001,与1(0000 0001)与,除了第一位上的数是它本身,其余位全部变成了0,这样就将第一位取了出来。
自己可以写个二进制数字分析下,如:1000 0000 第八位是1,要想将他移到第一位上,移动的就是bit-1位,之后让它和1与,这样就能将除了第一位之外的其他位上的数字置0,输出的就只有第一位上的数字,也即是我们需要的那个