2016-03-01 201 views
3
a += b != a & 1 

我在代碼中遇到了這個聲明,但我不確定代碼的最後部分(!= a & 1)是什麼。這是做什麼的?b!= a&1做什麼?

回答

6

首先你要諮詢的語言規範,實現什麼樣的操作順序在這裏。帶括號的推出,這將是:

a += (b != (a & 1)) 

a & 1是按位與(使它1如果a是奇數和0其他),那麼它的結果相比,b和這個結果是布爾將被添加到a。當然,最新的有意義的a需要是一種可以支持的類型(例如,通過將True的值設爲1False的值爲0),該類型可以支持該類型。

概括起來講,如果b==0會增加a如果a甚至如果b==1會增加a如果a是奇數。否則,如果b既不是0也不是1它將增加a

我注意到,一些意見沒有注意到的優先順序,甚至蟒蛇,他們有時會混淆(特別是如果你已經被那些由C混淆)。作爲一個經驗法則,我建議你明確地在子表達式的周圍放置圓括號,如果你是最微弱的懷疑 - 甚至在分離的狀態下分解它。通常情況下,編譯器無論如何都會做到最好。

+0

代碼有什麼影響?嘗試使用一些值,例如'a

+1

@PeterWood我已經更新了答案,'a'和'b'之間的關係是不相關的。相關的條件是「a」是偶數還是奇數,如果「b」是「0」還是「1」(或別的什麼)。 – skyking

+0

如果b不等於0或1,a將始終遞增。 –

相關問題