本文共 656 字,大约阅读时间需要 2 分钟。
题目:将两个二进制数比较,输出不同位数的个数
思路:异或运算
class Solution { public: int hammingDistance(int x, int y) { int sum = 0; for(int z=0;z<32;z++){ sum+=abs(((x<<31)^(y<<31))>>31); //右移时补1,所以需要取绝对值 x = x>>1; y = y>>1; } return sum; }};
另一种更快的方法:
class Solution { public: int hammingDistance(int x, int y) { int sum = 0; x = x ^ y; while(x){ sum ++; x -= (x&(-x)); } return sum; }};
(x&(-x)可以求出1所在的最低位置。比如 x = 5 (0101)
x x&(-x) x -(x&(-x))5(0101) 1(0001) 4(0100)4(0100) 4(0100) 0(0000)结束
从上面可以看出,只需要求解2次即可。
转载地址:http://vnrai.baihongyu.com/