我想知道这个for循环中终止条件的含义。
for (int i = 0; i < 1 << Level; i++) {
...
}
<<
将第一个操作数的位向左移动 n
次,其中 n
是第二个操作数。1 << Level
将数字 1
的单个 1
位向左移动 Level
次,相当于计算 2 ^ Level。i < 1 << Level
等价于 i < Math.pow(2,Level)
。for (int i = 0; i < 1 << Level; i++) {
...
}
等于
for (int i = 0; i < Math.pow(2,Level); i++) {
...
}
因为你是从 0 计数到 Math.pow(2,Level)-1,所以 for 循环将运行 "Math.pow(2,Level)" 次。
如果 Level = 2,则循环如下:
for(int i =0;i<4;i++){}
for(int i =0;i<8;i++){}
for(int i =0;i<32;i++){}
for (int i = 0; i < (1 << Level); i++) {
...
}
另外,由于Level
是一个变量,建议使用小写字母,即level
,除非它是一个常量,那么应该使用LEVEL
。而且我认为一般来说可读性>性能(如果这真的是个问题的话?)。所以,Math.pow(2,Level)
更容易理解,如果你不是低级程序员,看起来更像Java而不是C。