如何快速计算一个整数二进制中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个数的方法。