为什么将此位移至 51

Why does shifting this bit evalue to 51

我目前正在学习 C++ 考试。练习考试中的问题之一是:

这条语句的输出是什么。

cout <<(11>>1)<<1<<endl;

如我所见。 11 持有

的二进制等价物
1011.

将这个二进制数右移 1 位得到:

0101

然后将第一个数字向左移动就可以了

1010 

计算结果为 10。

但是,根据 运行 我的编译器中的相同语句,它表示数字的计算结果为 51。有人可以向我解释一下吗?

int a = (11>>1);
int b = 1;
cout << a << b;

清除了吗?

cout << (11>>1) << 1 << endl;

变成

cout << 5 << 1 <<endl;

<< 的流式含义优先于移动含义。因此它打印 5 后跟 1.

这是由于运算符重载造成的。

cout <<(11>>1)<<1<<endl;
//   ^ output operator
//        ^ right shift
//            ^ output operator

如果您将代码更改为此,那么您的答案将是正确的:

cout << ((11>>1) << 1) <<endl;
// brackets force left shift operator instead of output