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