位運算就是直接對整數(shù)在內(nèi)存中對應(yīng)的二進(jìn)制位進(jìn)行操作,一般是將數(shù)字化為二進(jìn)制數(shù)后進(jìn)行操作。本文將利用Python語言實現(xiàn)位運算,感興趣的可以了解一下
簡介
程序中的數(shù)在計算機(jī)內(nèi)存中都是以二進(jìn)制的形式存在的,位運算就是直接對整數(shù)在內(nèi)存中對應(yīng)的二進(jìn)制位進(jìn)行操作,一般是將數(shù)字化為二進(jìn)制數(shù)后進(jìn)行操作。
應(yīng)用場景
在常規(guī)操作和位運算的操作中使用位運算,可以提升性能。但是會造成代碼難以理解,建議合理利用。
1、統(tǒng)計奇數(shù)
2、統(tǒng)計偶數(shù)
3、統(tǒng)計不相同數(shù)等
4、求相反數(shù)
位運算分有6種:
1、按位與:兩個位都為1時,結(jié)果才為1(統(tǒng)計奇數(shù))即全1為1。
2、按位或:兩個位都為0時,結(jié)果才為0(統(tǒng)計偶數(shù))即全0為0。
3、按位異或:兩個位相同為0,相異為1(常用統(tǒng)計不相同數(shù))即不同為1。
4、按位取反:0變1,1變0,相當(dāng)于-x-1
5、左移運算:各二進(jìn)位全部左移若干位,高位丟棄,低位補(bǔ)0。
6、右移運算:各二進(jìn)位全部右移若干位,對無符號數(shù),高位補(bǔ)0,有符號數(shù)進(jìn)行補(bǔ)符號位(算術(shù)右移),或者補(bǔ)0(邏輯右移)。
案例源碼
#-*-coding:utf-8-*- #time:2022/5/22 17:56 #file:bitwise.py #公眾號:玩轉(zhuǎn)測試開發(fā) #&:兩個位都為1時,結(jié)果才為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時,結(jié)果才為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,相當(dāng)于-x-1 a4=10 """ 10=0b1010 -x-1=-11 """ print(bin(a4)) print(~a4)#-11 print(int("-0b1011",2)) #求相反數(shù) print(~a4+1)#-10 #<<:各二進(jìn)位全部左移若干位,高位丟棄,低位補(bǔ)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)) #>>:各二進(jìn)位全部右移若干位,對無符號數(shù),高位補(bǔ)0,有符號數(shù)進(jìn)行補(bǔ)符號位(算術(shù)右移),或者補(bǔ)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 #經(jīng)典案例:使用^找出出現(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
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/129029.html
此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納, 整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn), 當(dāng)然也會加上我對導(dǎo)圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復(fù)看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經(jīng)知道解題思路和方法, 想進(jìn)一步加強(qiáng)理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據(jù)題號先去力扣看看官方題解, 然后再看本文內(nèi)容). 關(guān)...
摘要:概述在中存在著通用函數(shù)和聚合去對數(shù)據(jù)進(jìn)行處理通過向量進(jìn)行對數(shù)據(jù)數(shù)組的計算而這些向量主要依靠一些通用函數(shù)而聚合是對面對大量數(shù)據(jù)時獲取描述性統(tǒng)計信息的方法。三角函數(shù)提供了大量好用的通用函數(shù),其中對于數(shù)據(jù)科學(xué)家最有用的就是三角函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000018925263); 概述 在Numpy中存在著通用函數(shù)...
摘要:位運算符是對其操作數(shù)按其二進(jìn)制形式逐位進(jìn)行運算。接下來我們逐一講解位運算符的計算原理按位與用于清零取某些指定位保位的計算原理,,結(jié)果上面使用按位與的一段程序運行結(jié)果為我們用二進(jìn)制來分析一下它的計算規(guī)則。 C語言中位運算符共有六種 目錄 1.&(按位與) 2. |(按位或) 3.^(按位抑或)...
摘要:由此,我嘗試著利用在前端進(jìn)行圖片主題色的提取。一主題色算法目前比較常用的主題色提取算法有最小差值法中位切分法八叉樹算法聚類色彩建模法等。 本文由云+社區(qū)發(fā)表 圖片主題色在圖片所占比例較大的頁面中,能夠配合圖片起到很好視覺效果,給人一種和諧、一致的感覺。同時也可用在圖像分類,搜索識別等方面。通常主題色的提取都是在后端完成的,前端將需要處理的圖片以鏈接或id的形式提供給后端,后端通過運行相...
閱讀 1168·2023-01-14 11:38
閱讀 1160·2023-01-14 11:04
閱讀 986·2023-01-14 10:48
閱讀 2538·2023-01-14 10:34
閱讀 1241·2023-01-14 10:24
閱讀 1123·2023-01-14 10:18
閱讀 736·2023-01-14 10:09
閱讀 818·2023-01-14 10:02