根据在线资源的建议,我正在使用Python在我的一个脚本中进行一些简单的位移。位移很好,它代表的结果很难。让我解释一下。
我有64位二进制表示
1000010101010111010101010101010101010101010101010111010101010101
,当表示为有符号整数时,应为负数。但是,Python默认键入long
,阻止数字被第一位签名,产生数字9608242155010487637
。
如何让Python识别64位的符号位?
澄清一下,我正在使用Python 2.7。
答案 0 :(得分:2)
您可以使用struct
,如下所示:
>>> import struct
>>> struct.unpack('l',struct.pack('P',
int('1000010101010111010101010101010101010101010101010111010101010101',
2)))
#=> (-8838501918699063979,)
结果是一个元组,然后您可以请求第一个元素:
>>> struct.unpack('l',struct.pack('P',
int('1000010101010111010101010101010101010101010101010111010101010101',
2)))[0]
#=> -8838501918699063979
答案 1 :(得分:2)
尝试bitstring
模块:
>>> from bitstring import BitArray
>>> s = '1000010101010111010101010101010101010101010101010111010101010101'
>>> BitArray(bin=s).int
-8838501918699063979