问题: 写一个函数返回一个无符号数作为二进制数时其中的1的数量。
例如一个 32位的11的二进制数表示为 00000000000000000000000000001011, 所以函数返回为 3.
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count=0;
while(n!=0)
{
if((n&1)==1)
count++;
n>>>=1;//向右移动一位,以0补位
}
return count;
}
}
java 位操作
1. ^ 异或。 相同为0,相异为1; 任何数与0异或都等于原值。
2. & 与。 全1为1, 有0为0;任何数与0异或都等于0。
3. | 或 。 有1为1, 全0为0。任何数与0或都等于原值。
4. << 左移。 补0。
5. >> 右移。 符号位是0补0,是1补1。
6. >>> 无符号右移。补0。
7. ~ 非 逐位取反