1.请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如把 9 表示成二进制是 1001;有 2 位是 1,因此如果输入 9,函数输出 2.
public static int numberOf1(int n) {
int count = 0;
while (n != 0) {
count++;
n = (n - 1) & n; //与
}
return count;
}
2.如何不用加号等方法实现两个数的和?
public static int bitAdd(int a, int b) {
if (b == 0) {
return a;
}
int sum = a ^ b; //异或
int carry = (a & b) << 1;//与,按位左移
return bitAdd(sum, carry);
}
详细的解析可以参考我之前的一篇文章:点击打开链接