题目描述

  输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

题目分析

  我们学习两个位运算:

  第一个是右移

  剑指Offer:二进制中1的个数

 

  在Java中右移动又分为:

  • 有符号右移(如上图,正数补0,负数补1),表示为 n>>1,即右移动一位。
  • 无符号右移(同上图,但是通通补0),表示为 n>>>1,即无符号右移动一位。

  第二个是与运算:

 剑指Offer:二进制中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;
    }

  

相关文章:

  • 2022-02-21
  • 2022-12-23
  • 2021-06-28
  • 2021-06-22
  • 2021-12-02
  • 2021-09-13
  • 2022-03-01
猜你喜欢
  • 2019-06-20
  • 2022-03-06
  • 2022-02-24
  • 2022-01-21
  • 2021-12-19
  • 2022-02-08
  • 2021-08-27
相关资源
相似解决方案