【发布时间】:2019-10-23 10:12:41
【问题描述】:
预期结果是将任意大小的n 的最后k 位设置为零。例如,如果我想将 0b10011101 截断 3,结果将是 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)方式来完成它。
如果不是,有什么更好的方法,为什么?
【问题讨论】: