一、题目描述
题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
示例1
输入
10
返回值
2
二、代码
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0){
count += n & 1;
n >>>= 1;//这里需要用无符号右移,因为直接右移的话负数最高位出来的还是1
}
return count;
}
}
三、相关知识点
关于Java位运算的简单说明请看这里
运算符 | 意义 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 异或运算符 |
~ | 取反运算符 |
<< | 左移运算符(补0,等于乘于2的n次方(没有发生有效位丢失时)) |
>> | 右移运算符(正数左边第一位补0,负数补1,等于除于2的n次方) |
>>> | 无符号右移运算符(高位补0) |
如果有进一步了解的需求的话可以参考
图解Java位运算
负数位运算的知识