求兩個數的二進制位不一樣的位置,最早想到的就是異或操做,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; }