如何确定前 x 位是否有效地以整数的二进制表示形式设置



在最近的一次采访中,有人问我这个问题。我通过运行循环并通过每次右移 1 来检查每个 x 位来给出解决方案。

然后他问我是否可以在不运行循环的情况下做到这一点。我尝试了各种方法,但找不到解决方案。这里有任何位摆弄专家可以帮助我吗?

示例 - 如果 num = 15 且 x = 2,则结果应为真,因为 15(01111) 中设置了第一个 2 位。

谢谢

我认为以下(Java实现)应该有效:

 /** Returns true if the least significant x bits in n are set */
 public static boolean areLSBSet(int n, int x) {
    // validate x, n
    int y = (1<<x) - 1;
    return (n & y) == y;
}

这个想法是快速找出2^x - 1的数字(这个数字设置了所有x最低有效位),然后按位和给定的数字n只有在设置了n中的那么多位时才给出相同的数字。

最新更新