2016-05-16 237 views
3

此代碼混淆了我很多:這個按位操作如何工作?

bool b = 8 & 7 == 0; //b == false 
std::cout << 8 & 7; //Outputs 0 

爲什麼會這樣?

+5

http://en.cppreference.com/w/cpp/language/ operator_precedence實際上,我得到[編譯器警告](http://coliru.stacked-crooked.com/a/acc44965f2315b25)。 – chris

+2

誰在教你編寫這樣的代碼? – SergeyA

回答

5

因爲==的優先級高於&。所以,你的表情相當於:

(8 & (7==0)) 

這等於0

1

您的問題是表達:

8 & 7 == 0; 

等於:

8 & (7 == 0); 

所以修復它明確使用括號:

(8 & 7) == 0; 

如果您不確定評估順序,您應該始終使用括號。

0

第一線已經coverred, 對於第二行,因爲8 = 1000和7 = 0111,結果爲0,whic預計