leadcode的Hot100系列--461. 汉明距离

求两个数的二进制位不一样的位置,最早想到的就是异或操做ui

异或:按位运算,相同为0,不一样为1。code

好比:
a = 6 对应的二进制表示为: 0 0 1 1 1
​ b = 9 对应的二进制表示为: 0 1 0 0 1
则 a ^ b = 14 对应的二进制表示为: 0 1 1 1 0
因此,只要算出异或以后的数的二进制表示方法里面1的个数。
好比,对于上面的异或以后为14,14的二进制里面1的个数为3,那么汉明距离就是3。
想知道是否有1,最快的固然仍是位与操做循环

与:按位运算,至关于乘法,0与0是0,1与0是0,0与1是0,1与1是1。二进制

因此,任何值与1相与,获得的就是就是原值二进制的最后一位
要么是1,要么是0,
这样就能获得原值的最低位是不是1。
而后再把原值总体右移一位,再查看最低位是不是1,
循环往复,就可以算出原值二进制里面1的个数了。
附上代码:方法

int hammingDistance(int x, int y){
    int iDistance = 0;
    unsigned int uiXor;
    uiXor = x ^ y;
    while (uiXor > 0)
    {
        if (uiXor & 1)
        {
            iDistance ++;
        }
        uiXor >>= 1;
    }
    return iDistance;
}
相关文章
相关标签/搜索