0
for($i=0;$i<$num;$i++) {
  if($i==even) $hilite="hilite";
  dothing($i,$hilite);
}

这基本上是我想要完成的。确定 $i 是否为偶数的最有效方法是什么?我知道我可以检查 half == mod 2 ...但这在计算上似乎有点过分?有没有更简单的方法?

4

5 回答 5

2

如果 ($i % 2 == 0)

于 2010-07-21T19:45:11.960 回答
1

它没有比 $i % 2 == 0 更简单的了。期间。

于 2010-07-21T19:47:02.217 回答
1

已经提到的% 2语法是最常用的,并且对于其他程序员来说最易读。如果您真的想避免计算的“开销”:

for($i = 0, $even = true; $i < $num; $i++, $even =! $even) {
  if($even) $hilite = "hilite";
  dothing($i,$hilite);
}

尽管分配本身可能比 '%2' (本质上只是一个位移)需要更多的工作。

于 2010-07-21T19:48:46.663 回答
0

将循环语句中的 i++ 更改为 i+=2,以便只检查 i 的偶数值?

于 2010-07-21T19:44:07.010 回答
0

通常,如果设置了 LSB(最低有效位),则该数字为奇数。您可以使用按位AND 运算符检查该位的状态:

if($testvar & 1){
  // $testvar is odd
}else{
 // $testvar is even
}

在上面的代码中,更有效的方法是$i在每个循环中增加 2(假设您可以忽略奇数值):

for($i=0;$i<$num;$i+=2){
  // $i will always be even!
}
于 2010-07-21T19:47:02.627 回答