题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解答:(借鉴大佬的方法)
1.一个数只要不是0,那么他的二进制中至少有一位是1;
2.一个二进制数减一,那么从他最右边的1开始,所有位取反。举个栗子,1100减一得1011,那么后三位100变成了
011。
3.一个数和他的前一位数做位与操作相当于把最右边得一变成0。举个栗子1100&1011=1000,1000与1100相比最右边得1变成了0.
4.该方法就是不断做上述操作,直到所有1变成0.

public class Q_11 {

public int NumberOf1(int n) {
    int count = 0;
    while (n != 0) {
        ++count;
        n = (n - 1) & n;
    }
    return count;
}

public static void main(String[] args) {
    System.out.println(new Q_11().NumberOf1(10));
}

}