如何快速计算一个整数二进制中1的个数

2019-01-26  本文已影响0人  狗语

首先在java中整数的二进制表示是31位最高位32位是符号位,所以我们可以采用一个巧妙的办法,每次去比对一个整数的二进制位的每一位是否是1 ,我们可以采用与运算(&)去比较,与运算是二进制运算只有2个1才为1,其余全为0所以可以通过下面这一段代码进行判断。

public int NumberOf1(int n) {

        int sum = 0 ;

        int a = 1 ;

        while(a != 0){

            if((n & a)!= 0 ) sum ++ ;

            a = a<<1 ;

        }

        return sum ;

    }

利用sum来记录1个个数,当a为1时对应的二进制是1,所以比较的是第一位的数是否为1,当a进行右移运算,则a变为2了对应的二进制是10则,会比较第二位是否为1,依次类推,进行计算,总体来说这个计算速度是比较快的,因为计算基本都是位运算计算速断较快,所以这是一种比较快的统计整数中1个数的方法。

上一篇下一篇

猜你喜欢

热点阅读