给定32位无符号整数的反转位。
例如,给定输入43261596
(以二进制表示为
00000010100101000001111010011100
),返回964176192
(代表于
二进制为00111001011110000010100101000000
)。
这不起作用
def reverseBits(self, n):
return int(bin(n)[:1:-1], 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