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

これは基本的に私が達成したいことです。$i が偶数かどうかを判断する最も効率的な方法は何ですか? 半分 == 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 に答える