1.题目描述
题目OJ链接
描述
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
2.思路
求2进制中1的个数,可以转换为求每一位,1的个数,1&1还是1
所以判断如果该数值&1为真,我们就count++
3.代码实现1
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
int NumberOf1(int n ) {
// write code here
int count = 0;
int i = 0;
for(i= 0; i <32; i ++)
{
if(n & (1<<i))
{
count++;
}
}
return count;
}
4.代码实现2
这里有一个更优秀的代码实现求取二进制中1 的个数。
-
思路:
就是每次n&n-1会取出它二进制中的最右侧的1
-
代码
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
int NumberOf1(int n ) {
int count=0 ;
while(n)
{
n = n&(n-1);
count++;
}
return count;
}