public class Demo10 {
/*
* 首先把n和1做与运算,判断n的最低位是不是1.接着把1左移一位得到2,再和n做与运算,就能判断n的次低位是不是1。
* 这样反复左移,每次都能判断n的其中一位是不是1
*/
public int badNumof1(int n){//此时循环次数为n的二进制数位数
int count=0;
int flag=1;
while(flag!=0){
if((n & flag)!=0)
{
count++;
}
flag=flag<<1;
}
return count;
}
/*
* 把一个整数减去1,再和原整数做与运算,会把该整数最右边的一个1变成0.
* 那么一个整数的二进制表示中有多少个1,就可以进行多少次运算
*/
public int goodNumof1(int n){//此时循环次数为n的二进制数中1的个数
int count=0;
while(n!=0){
++count;
n=(n-1)&n;
}
return count;
}
public static void main(String[] args) throws Exception {
Demo10 demo=new Demo10();
System.out.println(demo.badNumof1(7));
System.out.println(demo.goodNumof1(7));
}
}
面试题10:二进制中的1的个数
最新推荐文章于 2024-04-28 10:05:01 发布