移位运算位自己在写遗传算法的代码的时候出现的,如下图所示,当j=0的时候,此时
zero_one = test_j * random.randint(0, 1) #值为0
左移一位时候,变为test_j = 1了,开始没有搞明白,后来想了一下因为0在存储的时候不占位的原因,所以左移一位之后,test_j变为1
图1 第二个for循环j=0时候值j = 0
gene_byte = (gene).bit_length() = 0 //二进制位数位0
zero_one的主要左右就是移位,在第二个for循环里边,原本gene 占位为0个,经过j=1循环,二进制占位为2,因为zero_one此时为10
图二 第二个for循环j=1时候值zero_one = 10
gene = 0
#则或运算将gene的二进制占位增加了2位,如图二所示此时gene的占位数增加了
zero_one | gene = 10
gene_byte = 2
因此在移位运算中我们可以得出一下结论:
如果一个值为0则此时该值不占位,左移或者右移一位之后,值将变为1
用个实例来说明吧:
a = 001
b = 01
b = a | b #也就是说先运算后赋值
b = 001
网友评论