簡體   English   中英

當我使用cout顯示輸出時,為什么必須將按位運算符(例如&,|等)放在括號中?

[英]Why do I have to enclose bitwise operators, such as &,|,etc in a bracket, when I am displaying the output using cout?

我試圖直接通過cout流顯示按位運算的輸出。

在這種情況下,我得到了一個錯誤:

cout<<a|b 

但是,這似乎可行,

cout<<(a|b);

對於算術運算,

cout<<a+b;

cout<<(a+b);

工作正常。

注意:我正在考慮ab為整數。

例如,

int a = 5;
int b = 6;

有人可以解釋這背后的原因嗎?

<<也是運算符,因此“將參數傳遞給” cout作用與函數的作用不同。 我將其用引號引起來,因為您根本沒有傳遞參數,甚至都不是函數。 cout是具有為<<運算符定義的運算符重載的對象。

當您遇到cout << a | b; cout << a | b; 您最終得到(cout << a) | b (cout << a) | b由於操作員優先 cout << a零件是有效的,因為cout具有<<的重載,因此該零件返回對cout的引用,而您最終會做cout | b cout | b ,但是cout|沒有重載。 運算符,因此會出現編譯錯誤。

因為運算符優先

cout<<a|b變為(cout<<a)|b

cout<<a+b變為cout<<(a+b)

解析表達式時,在運算符優先級表的某些行上列出的運算符將比在其下一行具有較低優先級的任何運算符更嚴格地(如用括號括起來)綁定到其參數。

例如,表達式std::cout << a | b std::cout << a | b被解析為(std::cout << a) | b (std::cout << a) | b ,而不是std::cout << (a | b)

因此,在您的示例中:
cout<<(a|b)由於括號而按預期工作,而cout<<a|b則不然。

但是在cout<<a+b的情況下, +的優先級比<<更高,並且即使沒有括號也可以使用,因為首先評估a+b

所以cout<<a+bcout<<(a+b)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM