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 }
  • 相关阅读:
    Ubuntu 13.10 x64 安装 Eclipse Android SDK Java开发IDE
    域名 TTL 查询
    mysql 常用设置:字符集编码、自动完成(自动提示)、监听外网ip
    PHP 设置:timezone、error_log
    数字发行:电子书、电影、游戏、音乐
    细节:php array会把string key自动转成int吗?
    REST URI设计:版本号放在http header中,rewrite配置
    Linux时区设置
    Linux添加sudo用户
    php curl常见错误:SSL错误、bool(false)
  • 原文地址:https://www.cnblogs.com/noaman/p/5394272.html
Copyright © 2011-2022 走看看