【问题标题】:How to declare a list of 32 bit binary numbers and shift in Python?如何在 Python 中声明一个 32 位二进制数列表和移位?
【发布时间】:2017-08-03 13:21:04
【问题描述】:

我正在尝试在 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

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

【问题讨论】:

  • 使用 0b11100011... 来声明二进制数。使用bin(number) 打印。
  • 顺便说一句,Python 中不存在“二进制数”类型。或任何其他基地,就此而言。 0b111111110xFF255 都是完全相同的普通整数。

标签: python list python-3.x bit-shift 32-bit


【解决方案1】:

问题是:

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

请注意,在 中,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))

【讨论】:

  • 留点名声给别人,你总是那么快:)
  • @GijsDenHollander:注意到了。下次我给你五分钟:)
  • @WillemVanOnsem 谢谢!
猜你喜欢
  • 2010-11-16
  • 2011-05-03
  • 2012-05-24
  • 2018-03-17
  • 1970-01-01
  • 2018-06-13
  • 2021-10-09
  • 1970-01-01
  • 2017-08-18
相关资源
最近更新 更多