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 }
  • 相关阅读:
    PHP基础介绍
    day96
    day95
    day94
    day93
    day93之微信推送
    22个必须知道的css技巧
    利用Js或Css滤镜实现IE6中PNG图片半透明效果 IE6PNG妥妥的
    dedecms调用日期格式化形式大全
    innerHTML动态添加html代码和脚本兼容性问题处理方法
  • 原文地址:https://www.cnblogs.com/noaman/p/5394272.html
Copyright © 2011-2022 走看看