位運算就是直接對整數在內存中對應的二進制位進行操作,一般是將數字化為二進制數后進行操作。本文將利用Python語言實現位運算,感興趣的可以了解一下
簡介
程序中的數在計算機內存中都是以二進制的形式存在的,位運算就是直接對整數在內存中對應的二進制位進行操作,一般是將數字化為二進制數后進行操作。
應用場景
在常規操作和位運算的操作中使用位運算,可以提升性能。但是會造成代碼難以理解,建議合理利用。
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=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(統計偶數)即全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(常用統計不相同數)即不同為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)) #求相反數 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)) #>>:各二進位全部右移若干位,對無符號數,高位補0,有符號數進行補符號位(算術右移),或者補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 #經典案例:使用^找出出現一次的數 a7=1^1^2 a8=1^2^1 a9=2^1^1 print(a7) print(a8) print(a9) #統計原始方法和位運算方法花費的時間 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
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129029.html
此專欄文章是對力扣上算法題目各種方法的總結和歸納, 整理出最重要的思路和知識重點并以思維導圖形式呈現, 當然也會加上我對導圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據題號先去力扣看看官方題解, 然后再看本文內容). 關...
摘要:概述在中存在著通用函數和聚合去對數據進行處理通過向量進行對數據數組的計算而這些向量主要依靠一些通用函數而聚合是對面對大量數據時獲取描述性統計信息的方法。三角函數提供了大量好用的通用函數,其中對于數據科學家最有用的就是三角函數。 showImg(https://segmentfault.com/img/remote/1460000018925263); 概述 在Numpy中存在著通用函數...
摘要:位運算符是對其操作數按其二進制形式逐位進行運算。接下來我們逐一講解位運算符的計算原理按位與用于清零取某些指定位保位的計算原理,,結果上面使用按位與的一段程序運行結果為我們用二進制來分析一下它的計算規則。 C語言中位運算符共有六種 目錄 1.&(按位與) 2. |(按位或) 3.^(按位抑或)...
摘要:由此,我嘗試著利用在前端進行圖片主題色的提取。一主題色算法目前比較常用的主題色提取算法有最小差值法中位切分法八叉樹算法聚類色彩建模法等。 本文由云+社區發表 圖片主題色在圖片所占比例較大的頁面中,能夠配合圖片起到很好視覺效果,給人一種和諧、一致的感覺。同時也可用在圖像分類,搜索識別等方面。通常主題色的提取都是在后端完成的,前端將需要處理的圖片以鏈接或id的形式提供給后端,后端通過運行相...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02