詳解Python中位運算的簡單實現(xiàn)
簡介
程序中的數(shù)在計算機內存中都是以二進制的形式存在的,位運算就是直接對整數(shù)在內存中對應的二進制位進行操作,一般是將數(shù)字化為二進制數(shù)后進行操作。
應用場景
在常規(guī)操作和位運算的操作中使用位運算,可以提升性能。但是會造成代碼難以理解,建議合理利用。
1、統(tǒng)計奇數(shù)
2、統(tǒng)計偶數(shù)
3、統(tǒng)計不相同數(shù)等
4、求相反數(shù)
位運算分有6種:
1、按位與:兩個位都為1時,結果才為1(統(tǒng)計奇數(shù))即全1為1。
2、按位或:兩個位都為0時,結果才為0(統(tǒng)計偶數(shù))即全0為0。
3、按位異或:兩個位相同為0,相異為1(常用統(tǒng)計不相同數(shù))即不同為1。
4、按位取反:0變1,1變0,相當于 -x-1
5、左移運算:各二進位全部左移若干位,高位丟棄,低位補0。
6、右移運算:各二進位全部右移若干位,對無符號數(shù),高位補0,有符號數(shù)進行補符號位(算術右移),或者補0(邏輯右移)。
案例源碼
# -*- coding: utf-8 -*- # time: 2022/5/22 17:56 # file: bitwise.py # 公眾號: 玩轉測試開發(fā) # &:兩個位都為1時,結果才為1(統(tǒng)計奇數(shù))即全1為1。 a1 = 10 b1 = 9 """ 10 = 0b1010 9 = 0b1001 8 = 0b1000 """ print(bin(a1)) print(bin(b1)) print(a1 & b1) # 8 print(int("0b1000", 2)) # |:兩個位都為0時,結果才為0(統(tǒng)計偶數(shù))即全0為0。 a2 = 10 b2 = 9 """ 10 = 0b1010 9 = 0b1001 11 = 0b1011 """ print(bin(a2)) print(bin(b2)) print(a2 | b2) # 11 print(int("0b1011", 2)) # ^:兩個位相同為0,相異為1(常用統(tǒng)計不相同數(shù))即不同為1。 a3 = 10 b3 = 9 """ 10 = 0b1010 9 = 0b1001 3 = 0b0011 """ print(bin(a3)) print(bin(b3)) print(a3 ^ b3) # 11 print(int("0b0011", 2)) # ~:0變1,1變0,相當于 -x-1 a4 = 10 """ 10 = 0b1010 -x-1 = -11 """ print(bin(a4)) print(~a4) # -11 print(int("-0b1011", 2)) # 求相反數(shù) print(~a4 + 1) # -10 # <<:各二進位全部左移若干位,高位丟棄,低位補0,即:x << n = x * (2 ** n) a5 = 10 """ 10 = 0b1010 x = 10 * 2 ** 3 = 10 * 2 * 2 * 2 """ b5 = a5 << 3 print(bin(b5)) print(b5) # 80 print(int("0b1010000", 2)) # >>:各二進位全部右移若干位,對無符號數(shù),高位補0,有符號數(shù)進行補符號位(算術右移),或者補0(邏輯右移)。 # 即:x << n = x / (2 ** n) a6 = 64 """ 64 = 0b1000000 x = 64 / (2 ** 3) = 64 / (2 * 2 * 2) """ b6 = a6 >> 3 print(bin(b6)) print(b6) # 8 # 經典案例:使用 ^ 找出出現(xiàn)一次的數(shù) a7 = 1 ^ 1 ^ 2 a8 = 1 ^ 2 ^ 1 a9 = 2 ^ 1 ^ 1 print(a7) print(a8) print(a9) # 統(tǒng)計原始方法和位運算方法花費的時間 import time loop = 30000000 start1 = 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中位運算的簡單實現(xiàn)的文章就介紹到這了,更多相關Python位運算內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
計算機二級python學習教程(2) python語言基本語法元素
這篇文章主要為大家詳細介紹了計算機二級python學習教程的第2篇,Python語言基本語法元素,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05Numpy數(shù)據轉換成image并保存的實現(xiàn)示例
本文主要介紹了Numpy數(shù)據轉換成image并保存的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-12-12Python實現(xiàn)基于Excel數(shù)據繪制棋盤圖
這篇文章主要為大家介紹了如何根據可視化的需要,利用Python將Excel中的數(shù)據用棋盤圖的樣式來展示,文中的示例代碼簡潔易懂,需要的可以參考一下2023-07-07