如何在Python中声明32位二进制数和移位列表?

Eri*_*ric 2 python 32-bit list bit-shift python-3.x

我试图在 Python 中声明一个 32 位二进制数(1 和 0)的列表,在列表中挑选一个数字,然后进行移位。

这就是我宣布名单的方式,但我觉得这是不正确的。

myList = [11111011001101011001101011001100, 11111111000011001101001100111111,
     11000000111100001111000011110000, 11111111000000001111011100001111]
Run Code Online (Sandbox Code Playgroud)

现在我想从列表中选择一个数字并将其向左移动 4

例子:

num = myList[0]
example = num << 4
print("original", num)
print("shifted", example)
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

original 11111011001101011001101011001100
shifted 177776176017616176017616176017600
Run Code Online (Sandbox Code Playgroud)

如何解决我的申报和转移问题?谢谢

Wil*_*sem 5

问题是:

11111011001101011001101011001100
Run Code Online (Sandbox Code Playgroud)

被解释为十进制数。因此,1 和 0 代表 10 的幂。您可以使用0b前缀来指定您正在编写二进制数,因此:

myList = [0b11111011001101011001101011001100, 0b11111111000011001101001100111111,
          0b11000000111100001111000011110000, 0b11111111000000001111011100001111]
num = myList[0]
example = num << 4
print("original", bin(num))
print("shifted", bin(example))
Run Code Online (Sandbox Code Playgroud)

您可以使用它bin(..)来生成显示二进制表示法的数字的字符串。这将打印:

>>> print("original", bin(num))
original 0b11111011001101011001101011001100
>>> print("shifted", bin(example))
shifted 0b111110110011010110011010110011000000
Run Code Online (Sandbox Code Playgroud)

请注意,在中,ints 具有任意长度。因此,如果您想获得 32 位数字,则必须使用0xffffffff(即 32 个设置位,因此0b11111111111111111111111111111111)进行掩码:

myList = [0b11111011001101011001101011001100, 0b11111111000011001101001100111111,
          0b11000000111100001111000011110000, 0b11111111000000001111011100001111]
num = myList[0]
example = (num << 4)&0xffffffff
print("original", bin(num))
print("shifted", bin(example))
Run Code Online (Sandbox Code Playgroud)

  • 给别人留点名声,你总是那么快:) (2认同)