Topic 5.5 Write a function to determine the number of bits required to convert interger A to interger B.
方法1:XOR represents a bit that is different between A and B. Then shift the XOR result.
改进: To make it better, use c=c&(c-1) to clear the leaset significant bit.
public class c5_3 {
public static int bitSwapRequired(int a, int b) {
int count = 0;
for (int c = a ^ b; c != 0; c = c >> 1) {
count += c & 1;
}
return count;
}
public static int bitSwapRequired2(int a, int b){
int count = 0;
for (int c = a ^ b; c != 0; c = c & (c-1)) {
count++;
}
return count;
}
public static void main(String[] args) {
int a=15;
int b=16;
System.out.println(a+":"+Integer.toBinaryString(a));
System.out.println(b+":"+Integer.toBinaryString(b));
System.out.println("Required number of bits: " + bitSwapRequired(a, b) + " " + bitSwapRequired2(a, b));
}
}
//结果
15:1111
16:10000
Required number of bits: 5 5