题目解出来非常简单, 但是最优解即O1解略烧脑
int hammingDistance(int x, int y)
{
int ret = x ^ y;
ret = (ret & 0x55555555) + ((ret >> 1) & 0x55555555);
ret = (ret & 0x33333333) + ((ret >> 2) & 0x33333333);
ret = (ret & 0x0f0f0f0f) + ((ret >> 4) & 0x0f0f0f0f);
ret = (ret & 0x00ff00ff) + ((ret >> 8) & 0x00ff00ff);
ret = (ret & 0x0000ffff) + ((ret >> 16) & 0x0000ffff);
return ret;
}
该解法使用分支归并的思想, 先将间隔为1的各位数字合并, 随后间隔为2, 间隔为四,,,, 间隔为16时i, 两边的数字刚好能加到重合。