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

标签 math bit-manipulation

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

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

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

谢谢

最佳答案

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

关于math - 如何确定前 x 位是否有效地以整数的二进制表示形式设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37451293/

相关文章:

c++ - 编译器如何实现位域运算?

c - 按位运算符

c++ - 从连续的单词序列中提取任意范围的位的最有效方法是什么?

Java/C : OpenJDK native tanh() implementation wrong?

bit-manipulation - 计算一个间隔的设置位数的最快方法

algorithm - 如何判断一组值是否符合目标函数

Javascript 循环性能 : Counting occurrences of a number in a finite series

在 C 编程中改变一点

algorithm - 傅里叶除法算法背后的逻辑是什么?

c# - 将数字四舍五入,使其可以被 5 整除