//编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。
Java 版
方法1如下:初始cmp 1,每次左移一位,二进制表示即:1,10,100…;利用cmp和n按位与,只要不为0,该位即是1;
注:方法1需要指定移位32次,如果while循环移位可能会出现:移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位
public static int hammingWeight(int n) {
int cmp = 1, cnt = 0;
for (int i = 0; i < 32; i++) {
cnt += (n & cmp) != 0 ? 1 : 0;
cmp = cmp << 1;
}
return cnt;
}
方法2如下:n每次和n-1按位与,会将低位1置零;
public static int hammingWeight(int n) {
int cnt = 0;
while (n != 0) {
n &= n-1;
cnt++;
}
return cnt;
}