您的位置:首页 > 职场人生

面试题10:二进制中的1的个数

2016-01-11 18:56 519 查看
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));
}

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