PHP位運算和邏輯運算,乙個符號寫兩遍這麼簡單?

2021-10-08 16:52:04 字數 1137 閱讀 9691

引言

我們經常在程式流程中進行邏輯判斷,與或非,用的是爐火純青,相信你也不少用。那麼在php中,有兩個操作符非常接近,就是 | 和 ||,那麼他們有什麼區別呢?

本文就從幾個小栗子,說一說邏輯運算子,和位運算子那些恩愛糾纏。

學習時間

正好比php內的 & 和 && 的關係一樣,雙符號表示「短路」操作。什麼意思呢,就好比下面這個條件判斷:

if(condition1 || condition2 || condition3)

如果 condition1 = true,那麼後面的兩個condition根本不會進行檢查。效率是不是頓時高了起來?

假如寫成 | ,像下面這樣的判斷邏輯

if(condition1 | condition2 | condition3)

這個判斷會把 condition1,2,3 挨個執行一遍,不管 condition1到底是不是true。是不是有點浪費資源了!

所以說,不使用「短路」操作符,程式上下文是有一定風險的。比如下面的例子,檢查某個物件是否為空,且檢查其某個屬性值滿足某個條件:

if($class != null && $class->somevar

上面的寫法,如果 $class 本身就是 null,那麼直接熔斷;只有 $class 不為空,才會執行接下來的屬性檢查條件。

如果是乙個 & 號,會出現什麼情況呢?

如果 $class = null,直接丟擲 nullreferenceexception 異常;

如果 $class != null,第乙個條件通過,如果屬性 somevar 不存在,則丟擲method不存在異常;

所以說,沒有短路機制,這個判斷條件跑偏了。

深入學習

其實對於 | 或 &,在php中是作為位操作符使用。下圖是php位操作符的意義:

位操作應用於二進位制資料操作,比如:

a = 01010101

b = 10101010

a | b = 11111111

當然也可以是任何型別的資料,因為底層還是位元組碼的按位操作。

寫在最後

位操作在資料運算中很高效,但是不直觀。使用的時候要充分測試。

邏輯運算和位運算

本文主要針對的是邏輯運算 和位運算 關於移位預算,現在對開發來說基本不用,就不說了。邏輯運算主要是針對多個boolean表示式來說的,即a 1 b 2這種,就是說邏輯運算子左右都是boolean型別的表示式,這裡!是個特例,它是一元運算子,只對右邊boolean表示式取反,即!ture 變成了fal...

位運算和邏輯運算

public class test private static int j 0 private static boolean methodb int k j k return true public static void methoda int i methoda 0 system.out.pr...

位運算和邏輯運算

正數負數 原碼符號位為0 符號位為1 補碼原碼 符號位不變,其他取反 反碼原碼 補碼 1 比如說 5的原碼 00000000 00000000 00000000 00000101 5的原碼 10000000 00000000 00000000 00000101 5的反碼 00000000 00000...