做了leecode一道簡單題,計算漢明距離
想到位運算不要太簡單(python一行出答案),問題是沒想到、、
補課開始
一、題目介紹
二、手算思路
三、位運算求解
四、位與或,邏輯與或
兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。(只是想讓花時間寫的東西有點用,順便展示一下本人劣質的**供大佬們審閱,可跳過)給出兩個整數 x 和 y,計算它們之間的漢明距離。
注意:0 ≤ x, y < 231.
示例:輸入: x = 1, y = 4
輸出: 2
解釋:1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭頭指出了對應二進位制位不同的位置。
為方便理解,設兩數為x,y,思路如下:
舉例說明:**如下:class solution
if (x-math.pow(2,i) >= 0 && y-math.pow(2,i) <= 0)
if (x-math.pow(2,i) <= 0 && y-math.pow(2,i) >= 0)
if (x == 0 && y== 0)
}return distance;
}//判斷二進位制轉換後的最高位數
public int getmaximumbit(double a, double b)}}
if (a < b)
}
}return 0;}}
這裡需要使用冪運算,使用的是math.pow()方法,注意該方法返回的值是double型別。由於不知道測試用例有多大,這裡直接把int全換成double了,否則強制型別轉換應該也是可以的。
直接對兩個數的二進位制**進行按位比較即可,**如下:
class solution
x >>= 1;
y >>= 1;
}return cnt;}}
迴圈跳出條件依舊是兩數全為0的情況。移位運算沒有問題,主要還是對於 if 的判斷條件有點雲裡霧裡,於是自己編了段程式解釋一下:
public class main
//或運算
public static void oroperation(int a, int b)
//測試一下
public static void main(string args)
}
執行結果:
可見對兩數求位運算是將兩數先轉換成二進位制,然後根據與、或的關係進行逐位比較。
以第乙個式子 3 & 5 為例:
其他計算同理,與或運算滿**換律。邏輯與或(符號表示為&,|):
短路與或(符號表示為&&、||):java中短路與 邏輯與 短路或 邏輯或
created by cxh on 17 07 21.幾個名詞的定義和它們之間的區別 短路與 eg 條件1 條件2 執行過程 如果條件1成立,則繼續計算條件2 如果條件1不成立,則條件2不再計算,直接返回false.邏輯與 eg 條件1 條件2 執行過程 如果條件1成立,條件2繼續計算 如果條件1不...
邏輯與或短路
都是短路運算子 短路與 運算方法 只要 前面是false,無論 後面是true還是false,結果都將返 前面的值 g false true g 被賦值為 false true 結果為 true 只要 前面是true,無論 後面是true還是false,結果都將返 後面的值 g true false...
邏輯與和邏輯或的短路運算
短路運算 var a 1 var b 2 console.log a b 列印1 var a var b 2 console.log a b 列印2 var a 1 var b console.log a b 列印1 如果左邊為真 就先輸出左邊的值 如果左邊為假 就先輸出右邊的值 短路運算 var ...