我目前正在学习C ++考试。实践考试中的一个问题是:
此声明的输出是什么。
cout <<(11>>1)<<1<<endl;
我看到了。 11保存二进制等价物
1011.
将此二进制数向右移1位使其成为:
0101
然后将第一个向左移动
1010
评估为10。
然而,通过在我的编译器中运行相同的语句,它表示数字的评估值为51.有人可以向我解释这个吗?
答案 0 :(得分:13)
这是由于运营商超载造成的。
cout <<(11>>1)<<1<<endl;
// ^ output operator
// ^ right shift
// ^ output operator
如果您要将代码更改为此,那么您的答案将是正确的:
cout << ((11>>1) << 1) <<endl;
// brackets force left shift operator instead of output
答案 1 :(得分:6)
cout << (11>>1) << 1 << endl;
变为
cout << 5 << 1 <<endl;
<<
的流式传输意义优先于移位意义。因此它打印5后跟1。
答案 2 :(得分:4)
int a = (11>>1);
int b = 1;
cout << a << b;
清除?