我正在寻找一个巧妙的函数来反转数字的二进制表示的数字。
如果 f
是这样一个函数,我会拥有
int(reversed(s),2) == f(int(s,2))
只要 s 是一串以 1 开头的 0 和 1。
现在我正在使用 lambda x: int(''.join(reversed(bin(x)[2:])),2)
就简洁性而言,这是可以的,但这似乎是一种非常迂回的方式。
我想知道是否有更好(也许更快)的按位运算符方法,什么没有。
最佳答案
怎么样
int('{0:b}'.format(n)[::-1], 2)
或
int(bin(n)[:1:-1], 2)
第二种方法似乎是两种方法中较快的一种,但两者都比您当前的方法快得多:
import timeit
print timeit.timeit("int('{0:b}'.format(n)[::-1], 2)", 'n = 123456')
print timeit.timeit("int(bin(n)[:1:-1], 2)", 'n = 123456')
print timeit.timeit("int(''.join(reversed(bin(n)[2:])),2)", 'n = 123456')
1.13251614571 0.710681915283 2.23476600647
关于python - 在 Python 中反转数字的(二进制)数字的巧妙方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180168/