如题,在不使用Integer.toBinaryString的情况下,如何计算一个整数中1的个数?
跑偏的解法:考虑十进制转二进制的思路,通过除以2取余的思路,正数和0可以解决,负数是补码表示所以难以实现。
正确的解法:通过与运算(&)和无符号右移(>>>)运算来实现。注意不能是带符号的右移。
直接放代码:
public class Demo01 {
public static void main(String[] args) {
Demo01 demo01 = new Demo01();
int num = -128;
String str = Integer.toBinaryString(num);
System.out.println(str+"中1的个数为:"+demo01.solution(num));
}
public int solution(int num){
int count=0;
while(num!=0){
if ((num&1)==1){//与1相与结果为1的话说明最后一位是1,否则的话为0
count++;
}
num=num>>>1;
}
return count;
}
}
显示结果:
11111111111111111111111110000000中1的个数为:25
Process finished with exit code 0