zoukankan      html  css  js  c++  java
  • [程序员代码面试指南]位运算-整数的二进制数表达中有多少个1(位运算)

    题意

    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;
    	}
    }
    
  • 相关阅读:
    hanoi(老汉诺塔问题新思维)
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP框架
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10887483.html
Copyright © 2011-2022 走看看