Exam08_ChangeBit
descripción
Dados dos números enteros A y B, es necesario cambiar algunos bits de la A a B.
entrada
Línea 1: A y B, y separados por espacios
exportación
El número de bits necesario para cambiar
entrada de la muestra
10 8
Ejemplo de salida
1
mi código
método uno
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
String sA = Integer.toString(A,2);
//记录一下A转换成二进制的位数
int len = sA.length();
//指向第几位
int index = 0;
int cnt = 0;
while (true) {
//如果指向A的第一位和指向B的第一位不一样,就累加
if ((A&(1<<index)) != (B&(1<<index))) {
cnt++;
}
//指向下一位
index++;
//当超过了A的进制位数,就跳出
if (index > len) {
break;
}
}
System.out.println(cnt);
Segundo método
import java.util.Scanner;
public class Exam08_ChangeBit {
/**
* @param args
*/
public static void main(String[] args) {
//answer1();
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
//先异或,如果二者相应位不一致,就转为1
System.out.println(clearOne(A^B));
}
private static int clearOne(int x) {
int count=0;
while(x!=0){
//x-1表示将低位上的1变成0,后面的变成1
//将-1后的结果与原来的数做&运算,那么,后面的部分就全部被变成0(干掉)
//例如10100 减去1 ,变成 10011,10011&10100 就变成100000,这样就消掉最低位的1
x = (x-1)&x;
//就看消掉几个1,进行累加
count++;
}
return count;
}
}