2010-07-21 69 views
0
for($i=0;$i<$num;$i++) { 
    if($i==even) $hilite="hilite"; 
    dothing($i,$hilite); 
} 

這基本上是我想要完成的。 確定$ i是否是偶數的最有效方法是什麼? 我知道我可以檢查一半== mod 2 ...但是這似乎有點過度的計算?有一種更簡單的方法嗎?根據另一個變量的偶數/奇數狀態更改變量?

回答

0

將循環語句中的i ++更改爲i + = 2,以便僅檢查i的偶數值?

1

它沒有得到任何簡單得多$ I%2 == 0期。

+0

如果您將數字修改爲2,結果將永遠不會爲2.它始終是(假設$ i不是以負數開頭)0或1.它應該讀取'$ i%2 == 0 '。 – sigint 2010-07-21 19:52:03

+0

哎呀,傻的錯字。當然你是對的。 – delnan 2010-07-21 19:57:19

+0

哦,是的,這是一個有趣的錯字必須調試... – sigint 2010-07-21 20:02:45

0

通常,如果設置了LSB(最低有效位),則數字爲奇數。您可以通過使用bitwise 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! 
} 
1

已經提到% 2語法是最常用的,並且最可讀用於其他程序員。如果你真的想避免計算的「開銷」:

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

雖然分配本身可能是更多的工作,那麼「%2」(這是本質上只是一個位移位)。

相關問題