[英]Why is the code giving output of -61 when I do cout c but 195 when I cout a+b?
[英]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);
工作正常。
注意:我正在考慮a
和b
為整數。
例如,
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
對|
沒有重載。 運算符,因此會出現編譯錯誤。
解析表達式時,在運算符優先級表的某些行上列出的運算符將比在其下一行具有較低優先級的任何運算符更嚴格地(如用括號括起來)綁定到其參數。
例如,表達式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+b
與cout<<(a+b)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.