剑指Offer:二进制中1的个数
剑指Offer:二进制中1的个数
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目分析
我们学习两个位运算:
第一个是右移:

在Java中右移动又分为:
- 有符号右移(如上图,正数补0,负数补1),表示为 n>>1,即右移动一位。
- 无符号右移(同上图,但是通通补0),表示为 n>>>1,即无符号右移动一位。
第二个是与运算:

好,知道这两个操作后,我们还需要知道一个常识,Java中int是32位,所以我们将末尾与1做与运算,如果为1则统计,接着不断无符号右移即可!
Java题解
public int NumberOf1(int n) {
int ans = 0;
//右移位如何终止,int32位
for(int i=1;i<=32;i++){
if((n&1)==1)
ans++;
n = n>>>1;
}
return ans;
}

浙公网安备 33010602011771号