直接移位
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public: int hammingDistance(int x, int y) { x ^= y; int ret = 0; while(x) { ret += x & 1; x >>= 1; } return ret; } };
|
只遍历1
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public: int hammingDistance(int x, int y) { x ^= y; int ret = 0; while(x) { x &= x - 1; ++ret; } return ret; } };
|
x-1会将x中最近的一个1变成0,而这个1左边的全变成1。
所以x&x-1
会使得这个最近的1及其右边全都变成0,而左边保持不变,则每次都如此操作,循环次数就是1的个数