zoukankan      html  css  js  c++  java
  • 剑指offer系列9--二进制中1的个数

    【题目】输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。比如输入9,9的二进制表示是1001,1的个数是2,所以输出2。

    【思路】第一种方法是从最右一位开始右移,并且判断该数是否为1统计,缺点是输入负数时会出现死循环;0x80000000>>1...会0xFFFFFFFF死循环
         第二种方法是与1相与并进行左移,如果为1则表示该位为1,缺点是循环次数较多;
         第三种方法是将该数减1,再和原整数做与运算,直至变为全0,统计这样的操作有多少次。(推荐)

     1 package com.exe2.offer;
     2 
     3 /**
     4  * 【题目】输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。比如输入9,9的二进制表示是1001,1的个数是2,所以输出2。
     5  * 【思路】第一种方法是从最右一位开始右移,并且判断该数是否为1统计,缺点是输入负数时会出现死循环;0x80000000>>1...会0xFFFFFFFF死循环
     6  *             第二种方法是与1相与并进行左移,如果为1则表示该位为1,缺点是循环次数较多;
     7  *        第三种方法是将该数减1,再和原整数做与运算,直至变为全0,统计这样的操作有多少次。(推荐)
     8  *       
     9  * @author WGS
    10  *
    11  */
    12 public class NumbersInBinarry {
    13     //方法2
    14     public  int numOf1(int n){
    15         int count=0;
    16         int temp=n;
    17         int flag=1;
    18         while(flag!=0){ 
    19             n=temp&flag;
    20             if(n!=0){
    21                 ++count;
    22                 
    23             }
    24             flag=flag<<1;
    25         }
    26         return count;
    27         
    28     }
    29     //方法3
    30     public int getNumOf1s(int n){
    31         int count=0;
    32         while(n!=0){
    33             n=n&(n-1);
    34             count++;
    35         }
    36         return count;
    37         
    38     }
    39     public static void main(String[] args){
    40         NumbersInBinarry n=new NumbersInBinarry();
    41         //int num=n.numOf1(19);
    42         int num=n.getNumOf1s(19);//3
    43         System.out.println(num);
    44     }
    45 }
  • 相关阅读:
    APP热潮来临 图解九种商业模式
    Visual Studio 2010北京发布会
    高薪诚聘项目经理,架构师,高级工程师,工程师,网页设计师
    WCF闲谈:如何在流模式下传递参数
    下周股市走势预测
    明日大盘走势分析
    三步找出牛股技法
    Y COMBINATOR的六大强悍女人转自应用电台
    互联网创业公司失败的7个典型特征应用电台
    更多Windows Phone 8新功能详解
  • 原文地址:https://www.cnblogs.com/noaman/p/5394272.html
Copyright © 2011-2022 走看看