在python中反转位

时间:2018-04-20 20:07:31

标签: python

给定32位无符号整数的反转位。

例如,给定输入43261596(以二进制表示为 00000010100101000001111010011100),返回964176192(代表于 二进制为00111001011110000010100101000000)。

这不起作用

def reverseBits(self, n):
    return int(bin(n)[:1:-1], 2)

2 个答案:

答案 0 :(得分:9)

你的问题是假设Python的bin产生一个32位对齐的输出。它没有;它输出可能的最小位数。 Python 3的int类型具有无限的位数,即使在Python 2中,如果int溢出long的边界,int也将自动提升为int。与C >>> int('{:032b}'.format(43261596)[::-1], 2) 964176192 )的限制无关。

如果您希望它像特定宽度一样,最简单的方法是使用具有更多控件的格式化工具(这也将简化切片操作)。

例如,通过格式化为固定的32个字符宽,用零填充,您将获得所需的结果:

{{1}}

答案 1 :(得分:-1)

答案在bin()

的输出中
>>> bin(12345)
'0b11000000111001'

如您所见,它只输出前14个零和0。这是因为它删除了任何前导零。为什么这样做?好吧,python没有像许多其他语言一样使用固定大小的整数。实际上,int可能是任意数量的字节,具体取决于系统和实现。

而不是00000000000000001111111111111111成为11111111111111110000000000000000,而是变为1111111111111111