剑指offer11-二进制中1的个数
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
const NumberOf1 = n => {
let count = 0;
while(n !== 0){
if(n & 1 === 1) count++;
n = n >>> 1;
}
return count;
};
知识点:
- >>>无符号位移,补0,逻辑移动
- >>有符号位移,正数补0,负数补1,算术移动
解析
不必在意题中的补码,每次都和1进行与运算后移位。最低位:为1的位,执行与操作后依旧为1;为0的位,执行操作后依旧为0。而其余所有位都被置为0,即可进行区分。