面试题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)); } }