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

      

  • 相关阅读:
    做数据库维修工、还是码农,讨论走下神坛的职业【摘自vage】
    4.4 Web存储
    4.3 createjs
    4.2 HTML Canvas标签
    4.2 拖放
    4.1 HTML5 音频
    3.2 JacaScript面向对象
    3.1 JavaScript基础
    2.7 CSS动画
    2.6 CSS基本操作
  • 原文地址:https://www.cnblogs.com/MrSaver/p/12081273.html
Copyright © 2020-2023  润新知