Python位運算符
按位運算符是把數字看作二進制來進行計算的,使用正確將會大大優化程序,如進制轉化。Python中的按位運算法則如下:
變量 a 爲 60,b 爲 13,二進制格式如下:
- a = 0011 1100;
- b = 0000 1101;
運算符 | 描述 | 實例 |
---|---|---|
& | 按位與運算符:參與運算的兩個值,如果兩個相應位都爲1,則該位的結果爲1,否則爲0 | (a & b) 輸出結果 12 ,二進制解釋: 0000 1100 |
\ | 按位或運算符:只要對應的二個二進位有一個爲1時,結果位就爲1 | (a | b) 輸出結果 61 ,二進制解釋: 0011 1101 |
^ | 按位異或運算符:當兩對應的二進位相異時,結果爲1 | (a ^ b) 輸出結果 49 ,二進制解釋: 0011 0001 |
~ | 按位取反運算符:對數據的每個二進制位取反,即把1變爲0,把0變爲1 , ~x 類似於 -x-1 | (~a ) 輸出結果 -61 ,二進制解釋: 1100 0011,在一個有符號二進制數的補碼形式 |
<< | 左移動運算符:運算數的各二進位全部左移若干位,由 << 右邊的數字指定了移動的位數,高位丟棄,低位補0 | a << 2 輸出結果 240 ,二進制解釋: 1111 0000 |
>> | 右移動運算符:把">>"左邊的運算數的各二進位全部右移若干位,>> 右邊的數字指定了移動的位數 | a >> 2 輸出結果 15 ,二進制解釋: 0000 1111 |
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = 0
c = a & b; # 12 = 0000 1100
print ("1 - c 的值爲:",c)
c = a | b; # 61 = 0011 1101
print ("2 - c 的值爲:", c)
c = a ^ b; # 49 = 0011 0001
print ("3 - c 的值爲:", c)
c = ~a; # -61 = 1100 0011
print ("4 - c 的值爲:", c)
c = a << 2; # 240 = 1111 0000
print ("5 - c 的值爲:", c)
c = a >> 2; # 15 = 0000 1111
print ("6 - c 的值爲:", c)
1)<<按位左移
各二進位全部左移n位,高位丟棄,低位補0
x << n 左移 x 的所有二進制位向左移動n位,移出位刪掉,移進的位補零
a. 左移1位相當於乘以2
用途:快速計算一個數乘以2的n次方 (8<<3 等同於8*2^3)
b.左移可能會改變一個數的正負性
2)>>按位右移
各二進位全部右移n位,保持符號位不變
x >> n, x的所有二進制位向右移動n位,移出的位刪掉,移進的位補符號位, 右移不會改變一個數的符
右移1位相當於除以2
x 右移 n 位就相當於除以2的n次方
用途:
- 快速計算一個數除以2的n次方 (8>>3 等同於8/2^3)
- 可以使用右移代替二分查找和堆的插入操作。
3)使用舉例:
使用**>>**右移運算計算一個數的二進制表示:
a = 13 # 13 = 0000 1101
c = []
for i in range(4):#這裏4,因爲2^4>13
b = a >> i &1# 每次右移一位,相當於原數除2取整,和1取&與運算
c.append(b)
print ("c 的二進制表示爲:",c[::-1])
# c 的二進制表示爲: [1, 1, 0, 1]