题目:
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数)。
题解:
这道题一直纠结了半天,主要的问题是&运算符的执行。后来突然悟了,& 1 不就是 & 0000000000000001吗。执行的目的是在看最后一位是否为1,为1则返回1,否则返回0。
循环终止的条件是n=0,因为每次循环都在右移一位。
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int res = 0;
while(n != 0){
res += n & 1;
n >>>= 1;
}
return res;
}
}
">>>"无符号右移
操作规则:无论正负数,前面补零。
">>"右移
操作规则:正数前面补零,负数前面补1
"<<"左移
操作规则:无论正负数,后面补零。