预期的结果是将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)方式来完成它。
如果不是,什么是更好的方法,为什么?