首页 > 其他 > 详细

[程序员代码面试指南]位运算-整数的二进制数表达中有多少个1(位运算)

时间:2019-05-18 23:50:07      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:个数   获得   oid   system   ret   !=   二进制数中1的个数   todo   等于   

题意

32位有符号整型num,返回该整数二进制数中1的个数。

题解

法一:循环次数等于位数
移位

  • >>>补0右移
  • >>右移(负数时高位补1)

法二:循环次数等于1的个数
num=num&(num-1)抹掉最右边的1

法三:循环次数等于1的个数
num&(~num+1)获得最右边的1

todo

平行算法待搞懂

代码(法一、二、三)


public class Main {
    public static void main(String args[]) {
        int num=5;
        int count=countNum(num);
        System.out.println(count);
    }
    
//  public static int countNum(int num) {
//      int count=0;
//      while(num!=0) {
//          count+=num&1;
//          num=num>>>1;
//      }
//      return count;
//  }
    
//  public static int countNum(int num){
//      int count=0;
//      while(num!=0) {
//          num=num&(num-1);
//          ++count;
//      }
//      return count;
//  }
    
    public static int countNum(int num) {
        int count=0;
        while(num!=0) {
            num=num-((~num+1)&num);//
            ++count;
        }
        return count;
    }
}

[程序员代码面试指南]位运算-整数的二进制数表达中有多少个1(位运算)

标签:个数   获得   oid   system   ret   !=   二进制数中1的个数   todo   等于   

原文:https://www.cnblogs.com/coding-gaga/p/10887483.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号