static long nextPowerOf2(long n)
{
n--;
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
n++;
return n;
}
我正在閱讀博客中的Java代碼示例。我正在面對的難以理解這個代碼。請解釋一下這個函數的功能是什麼?需要幫助才能理解java中的一段代碼
static long nextPowerOf2(long n)
{
n--;
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
n++;
return n;
}
我正在閱讀博客中的Java代碼示例。我正在面對的難以理解這個代碼。請解釋一下這個函數的功能是什麼?需要幫助才能理解java中的一段代碼
正如方法的名稱所暗示的,它返回的下一個最近的和大於n
數是2。
你需要運行自己這個代碼,添加打印語句,看到的中間結果的力量代碼執行。
如果調用方法nextPowerOf2(6)
這究竟會發生的方法裏面:
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.
希望這有助於。
你知道那裏的每個[operator](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)嗎?這是第一件事會有所幫助;) – AxelH