G-Fact 19(布林值上的邏輯非和按位非運算子)
布林運算子是計算機科學中邏輯的基礎。它們用於對二進位制資料執行邏輯和按位運算。在 Python 中,邏輯非運算子用於否定布林表示式,而按位非運算子用於反轉數字中的位。在這篇博文中,我們將探討 Python 中布林值上的邏輯非和按位非運算子。
運算元和真值表
Python 中的布林運算子有“and”、“or”和“not”。如果兩個運算元都為 True,則“and”運算子的結果為 True,否則為 False。“or”運算子如果至少一個運算元為 True,則結果為 True,否則為 False。與運算元的真值相反,“not”運算子產生相反的結果。
以下是“and”和“or”運算子的真值表:
運算元 1 |
運算元 2 |
"and" |
"or" |
---|---|---|---|
True |
True |
True |
True |
True |
False |
False |
True |
False |
True |
False |
True |
False |
False |
False |
False |
對於“not”運算子,它只有一個運算元,其真值表如下:
運算元 |
"not" |
---|---|
True |
False |
False |
True |
演算法
邏輯非運算子返回布林表示式的相反值。如果表示式為真,則返回假。如果表示式為假,則結果為真。邏輯非運算子的演算法如下:
評估布林表示式。
如果表示式為真,則返回假。
如果表示式為假,則返回真。
按位非運算子返回數字的補碼。它反轉數字中的所有位,因此每個 0 變成 1,每個 1 變成 0。按位非運算子的演算法如下:
將數字轉換為二進位制。
反轉所有位。
將生成的二進位制數轉換回十進位制。
示例 1:邏輯非運算子
x = True y = not x print(y)
輸出
False
示例 2:按位非運算子
x = 5 # Decimal 5 is binary 101 y = ~x # Invert all bits, result is binary -110 (2's complement of 101) print(y)
輸出
-6
在第一個示例中,我們使用邏輯非運算子來否定 x 的布林值。結果為假,因為 x 為真。在第二個示例中,我們使用按位非運算子來反轉數字 5 中的位。結果為 -6,因為反轉的二進位制值 (-110) 被解釋為 2 的補碼數。
示例 3:邏輯非和按位非運算子
x = 7 # Decimal 7 is binary 111 y = not x # Invert boolean value of x, result is false because x is not zero z = ~x # Invert all bits in x, result is binary -1000 (2's complement of 111) w = not(z > 0) # Is z greater than 0? Invert boolean result, result is true because z is negative print(y, z, w)
輸出
False -8 True
在這個例子中,我們首先將十進位制值 7 賦給變數 x。然後我們使用邏輯非運算子來反轉 x 的布林值。結果為假,因為 x 不為零。接下來,我們使用按位非運算子來反轉 x 中的所有位。結果為二進位制 -1000(111 的 2 的補碼)。最後,我們使用邏輯非運算子來反轉比較 z > 0 的布林結果。由於 z 為負數,因此結果為真。
應用
邏輯非和按位非運算子可用於各種應用。以下是一些示例:
布林代數 - 邏輯非運算子用於布林代數中反轉語句的真值。這在邏輯推理和數學證明中很有用。
資料操作 - 按位非運算子可用於翻轉二進位制數中的位。這在資料操作和編碼中很有用。
安全 - 按位非運算子可用於密碼學中從密碼生成金鑰。透過反轉密碼中的位,生成的金鑰更難以猜測。
錯誤檢查 - 按位非運算子可用於錯誤檢查演算法,例如網路協議中使用的演算法。透過反轉訊息中的所有位,可以檢測和糾正錯誤。
結論
邏輯非和按位非運算子是 Python 程式設計中的重要工具。它們允許我們反轉布林表示式和翻轉二進位制數中的位。這些運算子可用於各種應用,從布林代數到密碼學。通過了解這些運算子的工作原理,我們可以編寫更高效、更安全的程式碼。