python中的按位左移

时间:2016-08-21 16:25:12

标签: python python-2.7 bit-manipulation bit-shift

我已提交了如下所示的代码段:

def shift():
    m=8
    low='10100111'
    lw=int(low,2)
    lw=lw<<1
    l_bin=bin(lw)[2:].zfill(m)

输出==&gt; 101001110(9位)

,而期望的输出==&gt; 01001110(8位)

我能理解正确移动lw会导致整数值从167变为334.但我希望输出成为所需的输出。

1 个答案:

答案 0 :(得分:2)

如果要模拟一个字节,就必须屏蔽高位(就像在C中表现一样)

lw=(lw<<1) & 0xFF

当然,也就是说,如果您将m设置为8,否则它将无效。

如果m变化,您可以像这样计算(或预先计算)掩码值:

mask_value = 2**m-1
lw=(lw<<1) & mask_value

(所有这一切的目的是更喜欢算术运算来串行更多CPU /内存的字符串操作)