int diffBits(int m, int n) {
int cnt = 0;
for (int i = 0; i < 32; ++i) {
if ((m % 2) != (n % 2)) cnt++;
m /= 2; n /= 2;
}
return cnt;
}
int diffBits(int m, int n) {
int x = m ^ n; // 異或:相同為 0,不同為 1
int cnt = 0;
while (x) {
cnt += x & 1;
x >>= 1;
}
return cnt;
}
int diffBits(int m, int n) {
int x = m ^ n, cnt = 0;
while (x) { x &= x-1; cnt++; }
return cnt;
}
#include <stdio.h>
int main() {
int m, n;
scanf("%d %d", &m, &n);
int x = m ^ n, cnt = 0;
while (x) { x &= x-1; cnt++; }
printf("不同位數: %d\n", cnt);
return 0;
}
「兩數二進制不同位數」等價於「m ^ n 中 1 的個數」。先異或聚焦差異,再統計 1 的個數,是位運算面試必考套路。