public class E15BitOperation {
//计算一个整数的二进制表示中有多少个1
//Java中只有 有符号数
public static int numberOfOne_Solution1(int number){
//常规解法:左移1
int count = 0;
int n = 1;
while(n != 0){
//每次都循环32次,有效操作比例低
if ((n & number) != 0)
count++;
n = n << 1;
}
return count;
}
public static int numberOfOne_Solution2(int number){
//某整数减一与自身取与,二进制表示中最右边的1将变为0
int count = 0;
while(number != 0){
count++;
number = (number - 1) & number;
}
return count;
}
public static boolean isPowerOf2(int number){
//判断一个整数是否为2的次方
return numberOfOne_Solution2(number) == 1;
}
public static int changeCount(int m, int n){
//计算要改变m二进制表示中的多少个位,才能与n相等
return numberOfOne_Solution2(m ^ n);
}
//测试用例
public static void main(String[] args){
int number1 = 0;
int number2 = 0x7FFFFFFF;
int number3 = 0xFFFFFFFF;
int number4 = 0x80000000;
int number5 = 1;
System.out.println(E15BitOperation.numberOfOne_Solution2(number1)); //0
System.out.println(E15BitOperation.numberOfOne_Solution2(number2)); //31
System.out.println(E15BitOperation.numberOfOne_Solution2(number3)); //32
System.out.println(E15BitOperation.numberOfOne_Solution2(number4)); //1
System.out.println(E15BitOperation.numberOfOne_Solution2(number5)); //1
}
}
二进制中1的个数(Java实现)
最新推荐文章于 2024-03-21 18:51:46 发布