为什么将此位移至 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
我目前正在学习 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