akg*_*akg 2 math bit-manipulation
在最近的一次采访中,我被问到这个问题.我通过运行循环并通过每次右移1检查每个x位来给出解决方案.
然后他问我是否可以在没有循环的情况下做到这一点.我尝试了各种方法,但找不到解决方案.在这里,任何有点小问题的专家可以帮助我吗?
示例 - 如果num = 15且x = 2,则结果应为true,因为在2(01111)中设置了第1个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;
}
Run Code Online (Sandbox Code Playgroud)
我们的想法是快速找出数字2^x - 1
(这个数字设置了所有x
最低有效位)然后采用按位和给定数字n
,只有在n
设置了很多位时才会给出相同的数字.