python
語言能夠對整數進行逐位操作,它支援的運算子及含義如下所示: &
:按位與 |
:按位或 ^
:按位異或 ~
:取反
<<
:左移
>>
:右移
對於整型資料,各種位操作是對該資料的補碼進行的(正數的補碼與原碼相同,下面舉例皆以正數為例);對於長整型資料,由於其位寬不定,所以進行位運算時,認為其補碼的符號位向外無限擴充套件。下面對各運算子進行舉例說明: (
1)首先看取反
>>> ~1 -2
>>> ~0x0001 -2
>>>
正整數1
,int
型是32
位的,就是
00000000 00000000 00000000 00000001
求反變為
11111111 11111111 11111111 11111110
,這正好是
-2的補碼。同樣十六進製制的
0x0001
結果是一樣的。 (
2)按位與
>>> 1&2 0
>>> 1&3 1
>>>
對於按位與,就是對參加運算的兩個整數的補碼逐位進行邏輯與運算,即參加運算的兩個運算量,如果兩個相應位都為
1,則該位的結果為
1,否則為0。
(2)按位或
>>> 1|1 1
>>> 1|2 3
>>>
對於按位或,就是對參加運算的兩個數字的補碼逐位進行邏輯或運算,即參加運算的兩個運算量,只要兩個相應位中有乙個為
1,那麼該位的結果為
1;只有兩個相應位都為
0時,該位的結果才為0。
(3)按位異或
>>> 1^1 0
>>> 1^2 3
>>>
對於按位異或,就是對參加運算的兩個數字的補碼逐位進行邏輯異或運算,即參加運算的兩個運算量,如果兩個相應位相同,那麼該位的結果為
0;如果兩個相應位不同即相異,那麼該位的結果為1。
(4)左移運算
>>> 1<<2 4
>>>
對於左移運算,就是將乙個數的二進位制位整體向左移若干位,移位後在低位補零,高位溢位部分捨棄。所以
1<<2
就是把整數
1的二進位制補碼
00000000 00000000 00000000 00000001
整體左移
2位,捨棄溢位的高位並在低位補零後得到結果
00000000 00000000 00000000 00000100
,正好是十進位制數
4。實際上,將乙個數左移幾位,就相當於將這個數乘以
2的幾次冪。 (
5)右移運算
>>> 4>>2 1
>>>
對於右移運算,就是將乙個數的二進位制位整體向右移若干位,如果該數為正數,移位後的低位溢位部丟棄,高位補零;如果該數為負數,則移位後的低位溢位部丟棄,高位補
1,以保持符號不變。所以
4>>2
就是把正整數
4的二進位制補碼
00000000 00000000 00000000 00000100
整體右移
2位,捨棄溢位的低位並在高位補零後得到結果
00000000 00000000 00000000 00000001
,正好是十進位制數
1。實際上,將乙個數右移幾位,就相當於將這個數除以
2的幾次冪。
在優先順序方面,取反運算子~跟算術運算子中的單目運算子(即只有乙個運算元參加運算)同級,並且是所有位運算子中優先順序最高的;然後是移位運算子(左移
<<
和右移》
),它們比取反運算子和算術運算中的加減運算子低;最後是逐位與、或和異或運算子。各位運算子按照優先順序有高到低排列如下所示:
取反運算子
>左移運算子
>右移運算子
>按位與運算子
>按位異或運算子
>按位或運算子
在位運算子中,取反運算子(單目運算子)~的結合性是從右向左結合,其餘雙目運算子的結合性是從左向右結合。
Python的二進位制位運算
python語言能夠對整數進行逐位操作,它支援的運算子及含義如下所示 按位與 按位或 按位異或 取反 左移 右移對於整型資料,各種位操作是對該資料的補碼進行的 正數的補碼與原碼相同,下面舉例皆以正數為例 對於長整型資料,由於其位寬不定,所以進行位運算時,認為其補碼的符號位向外無限擴充套件。下面對各運...
二進位制位運算
與運算,6 3 2 或運算 6 3 7 異或運算 6 3 5 反碼 6 7 左移 3 2 12 3 2 2 12 右移 3 1 1 3 2 1 無符號右移 3 1 1 3 2 1 按位與,當兩位同時為1時才為1如 1 1 1 1 0 0 0 1 0 6 3相當於 0110 0011 0010 2 按...
二進位制位運算
一 按位與 位全為1,結果才為1 0 0 0 0 1 0 1 0 0 1 1 1 特殊用法 清零。如果想將乙個單元清零,就是使其全部二進位制位為0,只要與乙個各位都為零的數值相與,結果為零 取乙個數中的指定位。如x 10101110要取x的低4位,用x 00001111 00001110即可 二 按...