簡介
應用場景
案例源碼
簡介程序中的數在計算機內存中都是以二進制的形式存在的,位運算就是直接對整數在內存中對應的二進制位進行操作,一般是將數字化為二進制數後進行操作。
應用場景在常規操作和位運算的操作中使用位運算,可以提升性能。但是會造成代碼難以理解,建議合理利用。
1、統計奇數
2、統計偶數
3、統計不相同數等
4、求相反數
位運算分有6種:
1、按位與:兩個位都為1時,結果才為1(統計奇數)即全1為1。
2、按位或:兩個位都為0時,結果才為0(統計偶數)即全0為0。
3、按位異或:兩個位相同為0,相異為1(常用統計不相同數)即不同為1。
4、按位取反:0變1,1變0,相當於 -x-1
5、左移運算:各二進位全部左移若干位,高位丟棄,低位補0。
6、右移運算:各二進位全部右移若干位,對無符號數,高位補0,有符號數進行補符號位(算術右移),或者補0(邏輯右移)。
案例源碼# -*- coding: utf-8 -*-# time: 2022/5/22 17:56# file: bitwise.py# 公眾號: 玩轉測試開發# &:兩個位都為1時,結果才為1(統計奇數)即全1為1。a1 = 10b1 = 9"""10 = 0b10109 = 0b10018 = 0b1000"""print(bin(a1))print(bin(b1))print(a1 & b1) # 8print(int("0b1000", 2))# |:兩個位都為0時,結果才為0(統計偶數)即全0為0。a2 = 10b2 = 9"""10 = 0b10109 = 0b100111 = 0b1011"""print(bin(a2))print(bin(b2))print(a2 | b2) # 11print(int("0b1011", 2))# ^:兩個位相同為0,相異為1(常用統計不相同數)即不同為1。a3 = 10b3 = 9"""10 = 0b10109 = 0b10013 = 0b0011"""print(bin(a3))print(bin(b3))print(a3 ^ b3) # 11print(int("0b0011", 2))# ~:0變1,1變0,相當於 -x-1a4 = 10"""10 = 0b1010-x-1 = -11"""print(bin(a4))print(~a4) # -11print(int("-0b1011", 2))# 求相反數print(~a4 + 1) # -10# <<:各二進位全部左移若干位,高位丟棄,低位補0,即:x << n = x * (2 ** n)a5 = 10"""10 = 0b1010x = 10 * 2 ** 3 = 10 * 2 * 2 * 2"""b5 = a5 << 3print(bin(b5))print(b5) # 80print(int("0b1010000", 2))# >>:各二進位全部右移若干位,對無符號數,高位補0,有符號數進行補符號位(算術右移),或者補0(邏輯右移)。# 即:x << n = x / (2 ** n)a6 = 64"""64 = 0b1000000x = 64 / (2 ** 3) = 64 / (2 * 2 * 2)"""b6 = a6 >> 3print(bin(b6))print(b6) # 8# 經典案例:使用 ^ 找出出現一次的數a7 = 1 ^ 1 ^ 2a8 = 1 ^ 2 ^ 1a9 = 2 ^ 1 ^ 1print(a7)print(a8)print(a9)# 統計原始方法和位運算方法花費的時間import timeloop = 30000000start1 = time.time()odd_list1 = []for i in range(loop): if i & 1 == 1: odd_list1.append(i)end1 = time.time()print(f"time1:{end1 - start1}")start2 = time.time()odd_list2 = []for i in range(loop): if i % 2 == 1: odd_list1.append(i)end2 = time.time()print(f"time2:{end2 - start2}")# time1:5.262001037597656# time2:4.736037492752075
到此這篇關於詳解Python中位運算的簡單實現的文章就介紹到這了,更多相關Python位運算內容請搜索軟件開發網以前的文章或繼續浏覽下面的相關文章希望大家以後多多支持軟件開發網!