移位運算位自己在寫遺傳算法的代碼的時候出現(xiàn)的,如下圖所示,當(dāng)j=0的時候,此時
zero_one = test_j * random.randint(0, 1)? ? ? ?#值為0
左移一位時候,變?yōu)閠est_j = 1了,開始沒有搞明白,后來想了一下因為0在存儲的時候不占位的原因,所以左移一位之后,test_j變?yōu)?
j = 0
gene_byte = (gene).bit_length() = 0 //二進(jìn)制位數(shù)位0

圖1 第二個for循環(huán)j=0時候值
zero_one的主要左右就是移位,在第二個for循環(huán)里邊,原本gene 占位為0個,經(jīng)過j=1循環(huán),二進(jìn)制占位為2,因為zero_one此時為10
zero_one = 10
gene = 0
#則或運算將gene的二進(jìn)制占位增加了2位,如圖二所示此時gene的占位數(shù)增加了
zero_one | gene = 10
gene_byte = 2

圖二?第二個for循環(huán)j=1時候值
因此在移位運算中我們可以得出一下結(jié)論:
如果一個值為0則此時該值不占位,左移或者右移一位之后,值將變?yōu)?
用個實例來說明吧:
?a = 001
b = 01
b = a | b? #也就是說先運算后賦值
b = 001