截断二进制数的最佳方法

时间:2019-10-23 02:00:27

标签: python binary

预期结果是将任意大小k的最后n位设置为零。例如,如果我想将0b10011101截断3,结果将是0b10011000

我想到了一些可能的解决方案,例如使用shift和其他二进制运算符,甚至是字符串操作。其中两个如下:

def truncate_bin_shift(n, k):
    return n >> k << k
def truncate_bin_and(n, k):
    return n & ((1<<n.bit_length()-k)-1 << k)

考虑到它的清洁程度,我最喜欢的是向前和向后移动,但是我想知道是否有其他替代方法对于更大的n值可以显着提高效率。

问题是,是否可以将其中任何一种视为完成任务的有效且适当的方式(读取pythonic)。

如果没有,什么是更好的方法,为什么?

1 个答案:

答案 0 :(得分:2)

您也可以这样做:

def truncate_bin_shift(n, k):
    return n & -1 << k

我个人更喜欢它,因为它仅使用每个参数一次,并使用&来掩盖这些位,这通常是执行截断(重置位)的方式。

相关问题