如果有不对的地方请发邮件到995232184@qq.com。若是不太明白思路或者过程也可发邮件给我,谢谢支持。
/**
* 题目:二进制中1的个数
* 描述:请实现一个函数,输入一个整数,输出概述二进制中1的个数。
* 思路:把一个整数减去1,再和原整数做与运算,会把最右边的一个1变成0.
* 那么一个整数的二进制中有多少个1,就进行多少次这样的操作
* 举个栗子:1100 & 1011 = 1000, 即12 & 11 = 8
* 当然,我们也可以用java内置的方法来完成,接下来大家看代码。
* @author lenovo047
*
*/
public class test10 {
public static void main(String[] args) {
System.out.println(numberOfOne1(13));
}
/*
* 方法1,-1后进行与运算
*/
public static int numberOfOne1(int n) {
int count = 0;
while(n != 0) {
count ++;
n = n & (n-1);
}
return count;
}
/*
* 方法2
* 利用java内置的toBinaryString方法转为二进制
* 面试官肯定不希望看见此方法,有种投机取巧的感觉
*/
public static int numberOfOne2(int n) {
int count = 0;
String str = Integer.toBinaryString(n);
for(int i = 0; i < str.length(); i++) {
if(str.charAt(i) == '1') {
count++;
}
}
return count;
}
}
与运算是两个数都为1,才是1;或运算是两个数中有一个数为1,就是1.