2013-10-16 49 views
-2

我有一個整數稱爲「計數」,當滿足某些條件時遞增。所以,我想問問,如果你寫這個條件會發生什麼:隱式bool評估,如果條件

if(count % 2) 
{ 
    return even_bit; 
} 
else 
{ 
    return odd_bit; 
} 

如果if條件上面檢查的條件計%2 = 0或計數%2的問題基本上是問= 0時,你不在整數數據類型變量的表達式中沒有明確定義它。

+2

爲什麼你不能編譯和運行代碼? –

+3

'0'爲'false',任何其他整數值爲'true'。 –

+1

你的意思是「哪些條件得到評估」?我只看到一個條件。 – jalf

回答

3

如果一個表達式求值爲0,它將被解釋爲FALSE - 對於任何非零值,它將被解釋爲TRUE。換句話說,

if(count % 2) 

相當於

if(count % 2 != 0) 

所以,你的代碼是 「倒退」。如果陳述是真的,count是奇怪的,你很可能會想要返回odd_bit(只是猜測在這裏。)。

+0

當然,這就是你爲什麼永遠不會像他那樣寫它的原因。如果表達式的類型爲'bool',那麼它就沒問題了(事實上,任何進一步的比較,例如'true'或'false'都會令人困惑)。如果它不是'bool',那麼你不會指望有點模糊和混淆的隱式轉換,而是編寫你想要的轉換。 –

+0

@JamesKanze這是一個意見。我通常更喜歡避免不必要的比較,尤其是*當涉及到%操作符時。剩下的就是%運算符的結果。該結果的布爾評估回答了一個問題*是否存在一些餘數。 –

+0

@JamesKanze許多C程序員也習慣於其他操作員的常見習語,例如, 'if(flag&MY_FLAG_NAME)'通常比'if(flag&MY_FLAG_NAME == MY_FLAG_NAME)'更適合。 –

0
if(count % 2) 

相當於

if(count % 2 != 0) 

現在,它都將取決於count無論是奇數還是偶數。如果是偶數,則count%2FALSE(返回odd_bit),如果count爲奇數,則count%2TRUE(返回even_bit)。

+0

實際上,它相當於if(static_cast (count%2))'。這與'if(count%2!= 0)'實際上是一樣的。我不知道你從哪裏得到第三個變體。 –

+0

第三個變體不正確,因爲_any_非零表達式將計算爲true。 –

+0

@JamesKanze;你是對的。 – haccks