【问题标题】:Best way to truncate a binary number截断二进制数的最佳方法
【发布时间】: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)方式来完成它。

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

【问题讨论】:

    标签: python binary


    【解决方案1】:

    你也可以这样做:

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

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

    【讨论】:

    • 负数如何以二进制表示?
    • 负数用二进制表示为two's complement
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2014-01-04
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多