扩展问题: 给定两个正整数a和b,问把a变成b需要改变几个二进制位?
/**
* 将a和b异或,相同为0,不同为1,然后对结果求其二进制表示中含有多少个1
* @param a
* @param b
* @return
*/
public static int result(int a,int b){
int res = 0;
int c=a^b;
while(c>0){
c &= c-1;
res++;
}
return res;
}