题目描述
输入一个整数,输出该数二进制表示中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)); }
}