逐位元運算
OR | : 其中一個是1,就是1
and & :兩個都是1,才是1
XOR ^ 簡單來說就是兩者相同為 0,不同為 1。
一正一反,一真一假(0 1 或1 0)
才是1(真),其他為0(假)
5^7=? 不要誤以為是5的7次方(5**7)
互斥或^的使用時機:
輸入的資料
不是Amplitude就是Phase
只有其中一個為真
不可能同時為真(假)
必為一真一假
assert (keyword==”Amp”) ^ (keyword==”Pha”),\
“資料不是Amplitude就是Phase,請確認輸入的資料”
IDLE:
~x = -x-1
位元左移<< (跟方向鍵類似,非 遠小於):
x<<y => 效果同x*(2**y)
左移16格:
#y才有左移16格
位元右移>>(跟方向鍵類似,非 遠大於):
x>>1 => 效果同x//2
IDLE驗證:
65538對2**16(65536)取商跟餘數:
#y才有對x右移,x還是原來的x
ndarray也可以做左移,右移:
import numpy as np
ary = np.array([61440, 71680, 81920])
ary_quotient = ary // (2**16)
print(ary_quotient)
ary_mod =ary % (2**16)
print(ary_mod)
print(“{:=^20s}”.format(“傳說中的分隔線”))
ary_right_shift = ary >> 16
print(ary_right_shift)
ary_left_shift = ary_right_shift<<16
ary_mod2 = ary-ary_left_shift
print(ary_mod2)
使用位元移位,
運算速度較//或%來得快
位元移位大約只要40%的時間:
封包:
濾波器:
濾掉x: &0
留下x: x&1
IDLE驗證:
5 | 7 是逐位元運算
結果=7 純屬巧合
int(A) | int(B),做逐位元運算,
結果沒有一定是A 或 B
or , and
bool(5) = True
bool(0以外的數字) = True
推薦hahow線上學習python: https://igrape.net/30afN