发布于 2012-10-02 06:26:51
int('{:08b}'.format(n)[::-1], 2)
你可以指定任何填充长度来代替8。如果你想变得更花哨,
b = '{:0{width}b}'.format(n, width=width)
int(b[::-1], 2)
允许您以编程方式指定宽度。
发布于 2014-01-04 16:04:33
如果您追求更高的速度,可以使用http://leetcode.com/2011/08/reverse-bits.html中描述的技术
def reverse_mask(x):
x = ((x & 0x55555555) << 1) | ((x & 0xAAAAAAAA) >> 1)
x = ((x & 0x33333333) << 2) | ((x & 0xCCCCCCCC) >> 2)
x = ((x & 0x0F0F0F0F) << 4) | ((x & 0xF0F0F0F0) >> 4)
x = ((x & 0x00FF00FF) << 8) | ((x & 0xFF00FF00) >> 8)
x = ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16)
return x
发布于 2016-06-02 06:07:34
def reverse_bit(num):
result = 0
while num:
result = (result << 1) + (num & 1)
num >>= 1
return result
我们实际上不需要将整数转换成二进制,因为在Python中,整数实际上是二进制的。
反转的想法就像在空间中对整数进行反转。
def reverse_int(x):
result = 0
pos_x = abs(x)
while pos_x:
result = result * 10 + pos_x % 10
pos_x /= 10
return result if x >= 0 else (-1) * result
对于每个循环,原始数字将丢弃最右边的位(以二进制表示)。当添加新的位时,我们在下一个循环中得到最右边的位并乘以2 (<<1
)。
https://stackoverflow.com/questions/12681945
复制相似问题