剑指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;
    }

  

posted @ 2019-12-22 21:55  子烁爱学习  阅读(234)  评论(0编辑  收藏  举报