Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16)

加入好友
加入社群
Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

逐位元運算

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

OR |  : 其中一個是1,就是1

and & :兩個都是1,才是1

XOR ^ 簡單來說就是兩者相同為 0,不同為 1。

一正一反,一真一假(0 1 或1 0)

才是1(真),其他為0(假)

 

5^7=? 不要誤以為是5的7次方(5**7)

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

互斥或^的使用時機:

輸入的資料

不是Amplitude就是Phase

只有其中一個為真

不可能同時為真(假)

必為一真一假

assert (keyword==”Amp”) ^ (keyword==”Pha”),\

“資料不是Amplitude就是Phase,請確認輸入的資料” 

 

IDLE:

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

~x = -x-1

 

位元左移<< (跟方向鍵類似,非 遠小於): 

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

x<<y => 效果同x*(2**y)

左移16格:

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

#y才有左移16格

 

位元右移>>(跟方向鍵類似,非 遠大於): 

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

x>>1 => 效果同x//2

 

IDLE驗證:

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

65538對2**16(65536)取商跟餘數:

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

#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)

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

使用位元移位,

運算速度較//或%來得快

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

位元移位大約只要40%的時間:

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

封包:

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

濾波器:

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

濾掉x: &0

留下x: x&1

 

IDLE驗證:

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

 

5 |  7 是逐位元運算

結果=7 純屬巧合

int(A) | int(B),做逐位元運算,

結果沒有一定是A 或 B

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

 

or , and

bool(5) = True

bool(0以外的數字) = True

Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

推薦hahow線上學習python: https://igrape.net/30afN

加入好友
加入社群
Python逐位元運算(bitwise operation),或or | , 且and & , 互斥或xor ^ , 反向~ ;位元左移 x << y => 效果同x*(2**y) ; 位元右移 x>>1 => 效果同x//2;x>>16效果同 x//(2**16) - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *