zoukankan      html  css  js  c++  java
  • 剑指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;
        }
    

      

  • 相关阅读:
    mysqldump
    设计模式
    设计模式
    设计模式
    设计模式
    PHP 调试
    PHP 调试
    Windows 下手工搭建 LNMP 环境
    设计模式
    设计模式
  • 原文地址:https://www.cnblogs.com/MrSaver/p/12081273.html
Copyright © 2011-2022 走看看