繁体   English   中英

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

[英]How to declare a list of 32 bit binary numbers and shift in Python?

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

这就是我声明列表的方式,但是我不认为这是正确的。

myList = [11111011001101011001101011001100, 11111111000011001101001100111111,
     11000000111100001111000011110000, 11111111000000001111011100001111]

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

例:

num = myList[0]
example = num << 4
print("original", num)
print("shifted", example)

输出看起来像这样:

original 11111011001101011001101011001100
shifted 177776176017616176017616176017600

我该如何解决我的声明和转移问题? 谢谢

问题是:

11111011001101011001101011001100

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

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

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

>>> print("original", bin(num))
original 0b11111011001101011001101011001100
>>> print("shifted", bin(example))
shifted 0b111110110011010110011010110011000000

请注意,在int具有任意长度 因此,如果要获取32位数字, 则必须使用0xffffffff屏蔽 (即32个设置位,因此为0b11111111111111111111111111111111 ):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM