题目: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路: 利用&运算
Java
package nowcoder;
public class S11_NumberOf1 {
public int numberOf1(int n){
int count = 0;
/*while (n != 0 ) {
if ((n & 1) == 1)
count++;
n = n >>> 1; //逻辑右移,符号位不动
}
return count;*/
/* 利用flag左移来比较每一位
int flag = 1;
while (flag != 0){
if ((n & flag) != 0)
count++;
flag = flag << 1;
}
return count;*/
// n & (n-1),有一个1,n就减1,直到n为0
while (n != 0){
count++;
n = n & (n-1);
}
return count;
}
public static void main(String[] args){
S11_NumberOf1 s11 = new S11_NumberOf1();
System.out.print(s11.numberOf1(-32));
}
}
Python
class NumberOf1:
def numberOf1(self, n):
return sum([(n >> i & 1) for i in range(0, 32)])
if __name__ == '__main__':
test = NumberOf1()
print(test.numberOf1(-32))