尝试运行此代码时
#include <iostream>
using namespace std;
int main() {
short int a = 0xFFFD, b = 10;
cout << a | b;
return 0;
}
我收到了错误
错误:不匹配&#39;运算符|&#39;
但是,将结果存储在另一个变量中似乎可以解决问题:
#include <iostream>
using namespace std;
int main() {
short int a = 0xFFFD, b = 10, c;
c = a | b;
cout << c;
return 0;
}
有人能解释我为什么吗?
答案 0 :(得分:3)
问题是按位运算符|与移位运算符相比,优先级较低。
因此这句话
cout << a | b;
等同于语句
( cout << a ) | b;
并且没有重载运算符|对于std::osteram
答案 1 :(得分:3)
cout << a | b;
这相当于:
(cout << a) | b;
如果您阅读了其余的错误消息,那么您会发现它没有告诉您operator|(ostream&, short int)
,这是真的。
通过将parens放在适当的位置来修复你的表达:
cout << (a | b);
(在其自己的变量中预先存储a | b
具有类似的效果。)
是的,这在这里不直观,但那是因为<<
已被重复使用&#34;从它的基本含义&#34;按位左移&#34;,由于该基数意味着最初确定|
的优先级低于<<