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;
}
相關文章
相關標籤/搜索