📜  给定数字的未设置最低有效K位(1)

📅  最后修改于: 2023-12-03 15:11:40.121000             🧑  作者: Mango

给定数字的未设置最低有效K位

当工作时,有时会遇到这样的情况:给定了一个数字n和一个整数k,需要将n的最低k位清零。那么如何清零呢?

解法一:

我们可以将n和一个二进制数111…111(k个1)做按位与运算。这样,结果就把n最低的k位清零了。实现方法如下:

def reset_last_k_bits(n, k):
    mask = (1 << k) - 1
    return n & (~mask)

代码解释:首先通过左移操作生成一个掩码,左移k位后就得到了k位二进制数111…111。与之后的取反操作是将掩码取反,将k位二进制数中的0变成1,表示要将n的最低k位清零。最后将生成的掩码与n做按位与运算,即可将n的最低k位清零。

解法二:

另一种解法是将n右移k位,再左移k位,这样就把n的最低k位清零了。实现方法如下:

def reset_last_k_bits(n, k):
    return (n >> k) << k

代码解释:首先将n右移k位,即将n的最低k位变成0。然后将这个结果左移k位,即将n最低的k位保持为0,其他位不变。最后的结果就是将n的最低k位清零。

以上两种方法二选一即可,各有优劣,选择哪种方法取决于实际需求和性能要求。