输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
1 public class Solution { 2 3 /** 4 * 解法1:数字1每次左移一位,与n进行与运算,结果为1代表n的当前bit位是1 5 * 6 * @param n 7 * @return 8 */ 9 public int NumberOf1(int n) { 10 11 int count = 0; 12 int flag = 1; 13 14 while (flag != 0) { 15 if ((n & flag) != 0) { 16 count++; 17 } 18 flag = flag << 1; 19 } 20 21 return count; 22 } 23 24 /** 25 * 解法2:n不为0,代表n中至少存在一个bit位为1,首先个数记一次,然后通过(n-1)&n消除n中一个1,循环这个操作 26 * 27 * @param n 28 * @return 29 */ 30 public int NumberOf2(int n) { 31 32 int count = 0; 33 while (n != 0) { 34 ++count; 35 n = (n - 1) & n; 36 } 37 return count; 38 } 39 }