題目:世界上有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;
}