移位运算

移位运算位自己在写遗传算法的代码的时候出现的,如下图所示,当j=0的时候,此时

zero_one = test_j * random.randint(0, 1)       #值为0

左移一位时候,变为test_j = 1了,开始没有搞明白,后来想了一下因为0在存储的时候不占位的原因,所以左移一位之后,test_j变为1

j = 0

gene_byte = (gene).bit_length() = 0 //二进制位数位0


移位运算_第1张图片
图1 第二个for循环j=0时候值

zero_one的主要左右就是移位,在第二个for循环里边,原本gene 占位为0个,经过j=1循环,二进制占位为2,因为zero_one此时为10

zero_one = 10

gene = 0

#则或运算将gene的二进制占位增加了2位,如图二所示此时gene的占位数增加了

zero_one | gene = 10

gene_byte = 2


移位运算_第2张图片
图二 第二个for循环j=1时候值

因此在移位运算中我们可以得出一下结论:

如果一个值为0则此时该值不占位,左移或者右移一位之后,值将变为1

用个实例来说明吧:

 a = 001

b = 01

b = a | b  #也就是说先运算后赋值

b = 001

你可能感兴趣的:(移位运算)