如何有效地找出第一个x位是否以整数的二进制表示形式设置?

时间:2016-05-26 03:54:08

标签: math bit-manipulation

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

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

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

由于

1 个答案:

答案 0 :(得分:5)

我认为以下(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中设置了很多位时才会给出相同的数字。