题目:世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
解题思路:
将m和n分别与
1
相与,如果得到的两个结果不相同,则说明该位是不相同的,将结果加
1
;然后分别将m与n右移一位,如此重复,直到m和n两者当中有一个为
0
,则退出循环。如果m或者n不为
0
,则将不为
0
的那个数与
1
相与,如果不为
0
,则将结果加
1
.如此直到该数为
0
为止
public int countBitDiff(int m, int n) {
int result=0;
while(m>0&&n>0){
int m1=m&1;
int m2=n&1;
if(m1!=m2){
result++;
}
m=m>>1;
n=n>>1;
}
while(m!=0){
int m1=m&1;
if(m1!=0){
result++;
}
m=m>>1;
}
while(n!=0){
int n1=n&1;
if(n1!=0){
result++;
}
n=n>>1;
}
return result;
}