思路:1和3,二进制分别为:0001,0011,需改变一位。10和13,二进制分别为:1010 ,1101,需要改变三位
因此得出结论就是,二个二进制表示中有几个位置上的数不相同,就需要改变几位,可先通过抑或(^)运算得到一个新的
二进制数,统计其中1的个数即可。
//给定二个数,m,n,求m变到n,要改变m表示的二进制中多少位才能得到n
public class Demo {
public static int Times(int m,int n) {
int count=0;
int sum=m^n;
while(sum!=0) {
count++;
sum=sum&(sum-1);
}
return count;
}