题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
示例1
- 输入
10
- 返回值
2
解题思路
直接按照除基取余
法,即:除以基数(这里为2),取其余数,统计1的个数。
public class Solution {
public int NumberOf1(int n) {
int m = n, count = 0;
while( m > 0) {
if(m % 2 != 0)
count++;
m = m/2;
}
return count;
}
}
-2147483648
的二进制是1000...000
,输出应该是1,程序输出的是0;不通过。
- 移位
public class Solution {
public int NumberOf1(int n) {
int m = 0x01, count = 0;
while( m != 0) {
if((m & n) != 0) {
count++;
}
m <<= 1;
}
return count;
}
}
代码
public class Solution {
public int NumberOf1(int n) {
int m = 0x01, count = 0;
while( m != 0) {
if((m & n) != 0) {
count++;
}
m <<= 1;
}
return count;
}
}