python - 在 Python 中反转数字的(二进制)数字的巧妙方法?

标签 python algorithm bit-manipulation

我正在寻找一个巧妙的函数来反转数字的二进制表示的数字。

如果 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/

相关文章:

python - print() 中的结束 ='...' 键不是线程安全的?

c - 快速增加数字为 C 中的 mod 16

python - 如何计算两个 .txt 文件之间的 Levenshtein 距离?

python - cx_Freeze 可执行文件之间的公共(public) lib 文件夹

algorithm - 寻找最大数量 k 使得对于 k 对的所有组合,我们在每个组合中有 k 个不同的元素

PHP 自定义编码函数没有给出所需的结果

java - 排序松散可比数据的算法?

java - 将 Uint32 整数编码为 Java 字节数组

c# - 按位枚举强制转换返回值不是预期的

python - 如何确定 Shapely LineString 是否复杂(即自相交)