您的位置:首页 > 其它

计算整数的二进制表示中1的个数

2015-11-05 20:19 260 查看

计算整数的二进制表示中1的个数

算法一:(最容易想到)

最容易想到的算法是用1进行移位与运算 如7的二进制表示为0111 用二进制 标志flag=0001 与7= 0111 运算判断最右边第一位为1 则计数加一,把flag左移一位为0010 与7= 0111进行与运算判断 7=0111 的二进制表示的倒数第二位为1,则计数加一 ,如此类推 当flag左移到为0时 则可计算出 7 = 0111 有3个1.

//通过移位来计算  整数的二进制表示中有多少个1
public static int numberOf1(int n){
int count = 0;
int flag = 1;
while(0 != flag){

if(0 != (n & flag))
count++;
flag = flag << 1;
}
return count;
}


算法二:利用 n & (n-1) 会把 n 的最右边的1清零

例如:6 = 0110 ;6 & (6-1)= 0100

此算法要比算法一更快,因为对于int型的整数来说 会循环32次;而算法二有多少个1就会循环多少次

对于需要计算整数的二进制有多少个1都可以用算法二计算(把最右边的1变成0;也可用于解决其他类似的问题),不多说 上代码更直观

//通过 n&(n-1) , n&(n-1)会把该整数最右边一个1变成0      计算 整数的二进制表示中有多少个1
public static int numberOf2(int n){
int count = 0;
while(0 != n){
count++;
n = n & (n-1);
}
return count;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: