Python成為專業人士筆記 位操作符

2021-10-06 07:21:27 字數 3393 閱讀 8752

創帆雲:python成為專業人士筆記--強烈建議收藏!每日持續更新!

按位操作符直接操作二進位制的字串,這些是最基本的操作,並直接由**處理器所支援。

在處理裝置驅動程式、圖形底層、加密和網路通訊時,這些位操作是必需的。本文提供一些有用的知識和對應python的按位運算子示例

〜運算子將翻轉數字中的所有位, 由於計算機使用帶符號的數字表示形式佔大多數,所以值得注意的是,二進位制補碼符號用於在寫入負數的情況下對負二進位制數進行前導(1) 編碼 而不是前導零(0)。

這意味著,如果您使用8位來表示您的二進位制補碼,則將處理 從0000 0000到0111 1111代表從0到127的數字並保留1*** ***x來代表負數

八位兩位補碼的數:

#位無符號值二進位制補碼值 

0000 0000 0 0

0000 0001 1 1

0000 0010 2 2

0111 1110 126 126

0111 1111 127 127

1000 0000 128 -128

1000 0001 129 -127

1000 0010 130 -126

1111 1110 254 -2

1111 1111 255 -1

從本質上講,這意味著1010 0110的無符號值為166(通過加(128 * 1)+(64 * 0)+(32 * 1)+(16 * 0)+(8 * 0)+(4 * 1)+(2 * 1)+(1 * 0)),它具有乙個二進位制補碼值 -90(通過新增(128 * 1)-(64 * 0)-(32 * 1)-(16 * 0)(8 * 0)-(4 * 1)-(2 * 1)-(1 * 0),以及對值的補碼)。

這樣,負數的範圍可以降至-128(1000 0000)。 zero(0)表示為0000 0000,負號表示一(-1)為1111 1111,

這等同於〜n = -n-1:

# 0 = 0b0000 0000

~0 #輸出: -1

#-1 = 0b1111 1111

# 1 = 0b0000 0001

~1 out: -2

-2 = 1111 1110

2 = 0b0000 0010

~2 #輸出: -3

#因為-3 = 0b1111 1101

#123 = 0b0111 1011

~123

#輸出: -124

#因為 -124 = 0b1000 0100

注意,此操作應用於正數時的總體效果可以總結為:

~n -> -|n+1|

然後,當應用於負數時,相應的效果是:

~-n -> |n-1|

以下示例說明了最後一條規則:

#-0 = 0b0000 0000

~-0#輸出 -1

#-1 = 0b1111 1111

# 0是這個規則的例外,因為-0總是== 0

#-1 = 0b1000 0001

~-1#輸出: 0

#0 = 0b0000 0000

#-2 = 0b1111 1110

~-2#輸出: 1

#1 = 0b0000 0001

# -123 = 0b1111 1011

~-123

#輸出: 122

#122 = 0b0111 1010

&操作符將執行二進位制「與」操作,如果在兩個運算元中都存在位,則複製該位。比如:

# 0 & 0 = 0

# 0 & 1 = 0

# 1 & 0 = 0

# 1 & 1 = 1

# 60 = 0b111100

# 30 = 0b011110

60 & 30

#輸出: 28

#28 = 0b11100

bin(60 & 30)

#輸出: 0b11100

『|』操作符將執行乙個二進位制「or」,如果它存在於任何乙個運算元中,那麼就會複製乙個位,比如:

# 0 | 0 = 0

# 0 | 1 = 1

# 1 | 0 = 1

# 1 | 1 = 1

#60 = 0b111100

#30 = 0b011110

60 | 30

#輸出: 62

#62 = 0b111110

bin(60 | 30)

#輸出: 0b111110

『<<』 操作符將執行按位的「左移」,即左運算元的值被右運算元給出的位數移動到左:

#2 = 0b10

2 << 2

#輸出: 8

#8 = 0b1000

bin(2 << 2)

#輸出: 0b1000

執行1的左位移位相當於乘以2

7 << 1

#輸出: 14

執行n的左位移位相當於乘以2**n :

3 << 4

#輸出: 48

『>>』 操作符將執行按位「右移」,即左運算元的值按右運算元提供的位數右移:

# 8 = 0b1000

8 >> 2

#輸出: 2

# 2 = 0b10

bin(8 >> 2)

#輸出: 0b10

執行1的右位移位等於2的整數除法 :

36 >> 1

#輸出: 18

15 >> 1

#輸出: 7

執行n的右位移位等於2**n的整數除法 :

48 >> 4

#輸出: 3

59 >> 3

#輸出: 7

所有的位操作符(除了 『~』 ),都有固定的用法:

a = 0b001

a &= 0b010

#輸出 a = 0b000

a = 0b001

a |= 0b010

#輸出 a = 0b011

a = 0b001

a <<= 2

#輸出 a = 0b100

a = 0b100

a >>= 2

#輸出 a = 0b001

a = 0b101

a ^= 0b011

#輸出 a = 0b110

Python成為專業人士筆記 Sqlite3 模組

創帆雲 python成為專業人士筆記 強烈建議收藏!每日持續更新!sqlite3模組是由gerhard haring編寫的。要使用此模組,必須首先建立表示資料庫的連線物件。這裡的資料將儲存在example.db檔案中 import sqlite3 conn sqlite3.connect examp...

Python成為專業人士筆記 Set集合操作剖析

創帆雲 python成為專業人士筆記 強烈建議收藏!每日持續更新!與另乙個集合互相操作 intersection 交集 intersection 或 輸出 union 合併 union 輸出 difference 集合相減 difference 輸出 symmetric difference 對稱差...

Python成為專業人士筆記 自定義鍊錶

創帆雲 python成為專業人士筆記 強烈建議收藏!每日持續更新!鍊錶是節點的集合,每個節點由乙個索引和乙個值組成,索引將所有節點串成了乙個序列。自定義鍊錶可用於實現更為複雜的資料結構,如列表 堆疊 佇列和關聯陣列等。本例使用與內建list物件相同的許多方法實現了乙個鍊錶 元素節點處理類 class...