题意:求int32整数m和n的二进制表达,有多少个位(bit)不同么?
public
int
countBitDiff(
int
m,
int
n) {
int
dif = m ^ n;
//先将二者做异或运算,得到结果;
int
cnt =
0
;
while
(dif !=
0
) {
dif = dif & (dif-
1
); //每一步将cnt中二进制的1的个数减一
cnt++;
}
//统计一个整数dif含有多少个1;
return
cnt;
}
异或 ^:不同则一
取反 ~:
两数对换: A = A^B
B = A^B
A = A^B