python語言能夠對整數進行逐位操作,它支援的運算子及含義如下所示:
&:按位與
|:按位或
^:按位異或
~:取反
<<:左移
>>:右移
對於整型資料,各種位操作是對該資料的補碼進行的(正數的補碼與原碼相同,下面舉例皆以正數為例);對於長整型資料,由於其位寬不定,所以進行位運算時,認為其補碼的符號位向外無限擴充套件。下面對各運算子進行舉例說明:
(1)首先看取反
>>> ~1
-2>>> ~0x0001
-2>>>
正整數1,int型是32位的,就是00000000 00000000 00000000 00000001 求反變為11111111 11111111 11111111 11111110,這正好是-2的補碼。同樣十六進製制的0x0001結果是一樣的。
(2)按位與
>>>
1&20
>>>
1&31
>>>
對於按位與,就是對參加運算的兩個整數的補碼逐位進行邏輯與運算,即參加運算的兩個運算量,如果兩個相應位都為1,則該位的結果為1,否則為0。
(2)按位或
>>>
1|11
>>>
1|23
>>>
對於按位或,就是對參加運算的兩個數字的補碼逐位進行邏輯或運算,即參加運算的兩個運算量,只要兩個相應位中有乙個為1,那麼該位的結果為1;只有兩個相應位都為0時,該位的結果才為0。
(3)按位異或
>>>
1^10
>>>
1^23
>>>
對於按位異或,就是對參加運算的兩個數字的補碼逐位進行邏輯異或運算,即參加運算的兩個運算量,如果兩個相應位相同,那麼該位的結果為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即可 二 按...