【发布时间】:2015-11-08 06:37:47
【问题描述】:
我想知道这里是否有人知道终止条件 下面的for循环应该是什么意思。
for (int i = 0; i < 1 << Level; i++) {
...
}
【问题讨论】:
-
<<是位运算符。它乘以 2 级时间。
我想知道这里是否有人知道终止条件 下面的for循环应该是什么意思。
for (int i = 0; i < 1 << Level; i++) {
...
}
【问题讨论】:
<< 是位运算符。它乘以 2 级时间。
<< 将第一个操作数 n 的位向左移动,n 是第二个操作数。
因此1 << Level将数字1Level的单个1位向左移动了几次,相当于计算了2^级。
所以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++) {
...
}
所以 for 循环将运行 "Math.pow(2,Level)" 次,因为您从 0 计数到 Math.pow(2,Level)-1。
如果 Level = 2 那么循环是
for(int i =0;i<4;i++){}
如果 Level = 3 则循环为
for(int i =0;i<8;i++){}
如果 Level = 5 则循环为
for(int i =0;i<32;i++){}
【讨论】:
除了其他答案之外,如果不清楚,在表达式周围加上括号可能会有所帮助
for (int i = 0; i < (1 << Level); i++) {
...
}
此外,由于Level 是一个变量,因此建议使用小写字母,即level,除非它是一个常量,否则它应该是LEVEL。而且我认为总的来说可读性>性能(如果它甚至是一个问题?)。所以Math.pow(2,Level)如果你不是低级程序员就更容易理解,看起来更像Java而不是C。
【讨论】: