为什么将此位evalue移位到51

时间:2015-03-06 10:35:04

标签: c++ bitwise-operators bit-shift

我目前正在学习C ++考试。实践考试中的一个问题是:

此声明的输出是什么。

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

我看到了。 11保存二进制等价物

1011.

将此二进制数向右移1位使其成为:

0101

然后将第一个向左移动

1010 

评估为10。

然而,通过在我的编译器中运行相同的语句,它表示数字的评估值为51.有人可以向我解释这个吗?

3 个答案:

答案 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;

清除?