zoukankan      html  css  js  c++  java
  • Java之一个整数的二进制中1的个数

    这是今年某公司的面试题:

    一般思路是:把整数n转换成二进制字符数组,然后一个一个数:

    private static int helper1(int i) {
        char[] chs = Integer.toBinaryString(i).toCharArray();
        int res = 0;
        for (int j = 0; j < chs.length; j++) {
            if (chs[j] == '1') {
                res++;
            }
        }
        return res;
    }

    第二种方法是:将整数n与1进行与运算,当整数n最低位是1时,则结果为1,否则结果为0。 然后将1左移一位,继续与n进行与运算,当次低位是1时,结果非零,否则结果为0。循环以上操作,记录非零的次数即可。 

        public static int helper2(int n ){
    
            int count = 0;
            int flag = 1;
            while(flag <= n){
                if((n&flag) != 0)
                    count++;
                flag = flag<<1;
            }
            return count;
        }

    第三种方法是:将整数n与1进行与运算,当整数n最低位是1时,则结果为1,否则结果为0。 然后将 n 右移一位,继续与 1 进行与运算。循环以上操作,直到n=0结束,记录非零(为1)的次数即可。

        private static int helper3(int n) {
            int res = 0;
            while (n!=0) {
                if ((n&1) == 1) {
                    res++;
                }
                n = n>>1;
            }
            return res;
        }

    第四种方法是:将整数n与(n-1)进行与运算把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。从而可以减少比较的次数。

        private static int helper4(int n) {
            int res = 0;
            while (n!=0) {
                res++;
                n = n&(n-1);
            }
            return res;
        }

    Over...

    参考:

    1. Java求一个整数的二进制中1的个数

  • 相关阅读:
    Asp.net HttpContext 简介
    cxf 调用 .net webservice
    Dapper.Rainbow 简单使用
    Aspose.words 书签定位
    修改WCF的默认序列化格式
    mysql8.0.18忘记密码后重置密码
    聊一聊c#中的MATH.ROUND方法
    Windows上安装MySql
    win7搭建本地SonarQube环境进行c#代码分析
    使用dapper遇到的问题及解决方法
  • 原文地址:https://www.cnblogs.com/gjmhome/p/11423301.html
Copyright © 2011-2022 走看看