需要帮助才能理解java中的一段代码吗
我正在博客中阅读这个java示例代码。我很难理解这段代码。请解释一下这个函数执行的是什么?因为方法的名称表明它返回的是下一个最接近且大于需要帮助才能理解java中的一段代码吗,java,Java,我正在博客中阅读这个java示例代码。我很难理解这段代码。请解释一下这个函数执行的是什么?因为方法的名称表明它返回的是下一个最接近且大于n的数字,即2的幂 您需要自己运行这段代码,添加print语句,并查看代码执行的中间结果 如果调用该方法nextPowerOf2(6)则该方法内部将发生以下情况: static long nextPowerOf2(long n) { n--; n |= n >> 1; n |= n >> 2; n |= n
n
的数字,即2的幂
您需要自己运行这段代码,添加print语句,并查看代码执行的中间结果
如果调用该方法nextPowerOf2(6)
则该方法内部将发生以下情况:
static long nextPowerOf2(long n)
{
n--;
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
n++;
return n;
}
希望这能有所帮助。你知道里面的每一个人吗?这是第一件有帮助的事情;)不难看出函数的作用是什么,你能解释一下n背后的逻辑吗|n@Oswald. OP请求帮助理解代码的作用。如果你需要理解算法为什么有效,你需要花一些时间在上面。@Oswald。我根据Nurzhan的建议挖掘出这段代码,这段代码是两个运算符的组合,例如我们通过了6,然后是n--;因此n变为5。然后,通过执行一位右移,5的二进制为101,数字变为10,n仍然为5,即101。现在按位执行或我们得到101+010=111,即7。感谢Nurzhan的帮助。
n--; // n becomes 5;
n |= n >> 1; // This is equivalent to n = n | n >> 1.
// Bit shift >> has higher precedence than bitwise OR |.
// This is why it becomes 7. Try it yourself and read about
// these operators.
n |= n >> 2; // n is 7
n |= n >> 4; // n is 7
n |= n >> 8; // n is 7
n |= n >> 16; // n is 7
n++; // n is 8
return n; // return n which is equal to 8 - the next nearest to 6 power of 2.