题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1.因此,如果输入9,则该函数输出2。
思路: 把一个整数减去1,再和原整数做与运算,会把改整数最右边的1变成0。那么能进行多少次这样的计算,就可以得知有多少个1。
代码实现:
function get1Num(n){
var count = 0;
while(n){
count++;
n= n & (n-1);
}
return count;
}
相关题目:
- 用一条豫剧判断一个整数是不是2的整数次方。一个整数如果是2的整数次方,那么他的二进制表示有且只有一个1,而其他所有位都是0。根据上面的思路,把这个整数减去1之后再与他自己做与运算,这个整数中唯一的1就会变成0。
- 输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。比如:10的二进制位1010,13的二进制表示为1101,需要改变1010中的3位才能得到1101。可分两步解决,第一:求两个数的异或;第二:统计异或结果中1的个数。
关于位运算的基本知识可以在这看