二进制中1的个数

187 阅读1分钟

题目:请实现一个函数,输入一个整数,输出该数二进制表示中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的个数。

关于位运算的基本知识可以在这看