Java之一个整数的二进制中1的个数
这是今年某公司的面试题:
一般思路是:把整数n转换成二进制字符数组,然后一个一个数:
private static int helper1(int i) { char[] chs = Integer.toBinaryString(i).toCharArray(); int res = 0; for (int j = 0; j < chs.length; j++) { if (chs[j] == '1') { res++; } } return res; }
第二种方法是:将整数n与1进行与运算,当整数n最低位是1时,则结果为1,否则结果为0。 然后将1左移一位,继续与n进行与运算,当次低位是1时,结果非零,否则结果为0。循环以上操作,记录非零的次数即可。
public static int helper2(int n ){ int count = 0; int flag = 1; while(flag <= n){ if((n&flag) != 0) count++; flag = flag<<1; } return count; }
第三种方法是:将整数n与1进行与运算,当整数n最低位是1时,则结果为1,否则结果为0。 然后将 n 右移一位,继续与 1 进行与运算。循环以上操作,直到n=0结束,记录非零(为1)的次数即可。
private static int helper3(int n) { int res = 0; while (n!=0) { if ((n&1) == 1) { res++; } n = n>>1; } return res; }
第四种方法是:将整数n与(n-1)进行与运算:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。从而可以减少比较的次数。
private static int helper4(int n) { int res = 0; while (n!=0) { res++; n = n&(n-1); } return res; }
Over...
参考: