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 hereint 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;}