1

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

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

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)方式来完成它。

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

4

1 回答 1

2

你也可以这样做:

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

我个人更喜欢它,因为它只使用每个参数一次,并用于&屏蔽位,这更像是通常执行截断(重置位)的方式。

于 2019-10-23T02:12:41.183 回答