什么是C ++中的移位运算符?

按位移位运算符是将shift_expression的位向右移动的右移运算符(>>),以及将shift_expression的位向左移动的左移运算符(<<)。

左移运算符使移位表达式中的位向左移位加法表达式指定的位置数。移位操作已腾空的位位置为零填充。左移是逻辑移位(从末端移出的位将被丢弃,包括符号位)。

右移运算符使移位表达式中的位模式向右移位加法表达式指定的位置数。对于无符号数字,移位操作已腾空的位位置为零。对于带符号的数字,符号位用于填充腾出的位位置。换句话说,如果数字为正,则使用0;如果数字为负,则使用1。

示例

#include<iostream>
using namespace std;
int main() {
   int a = 1, b = 3;
   
   //现在是00000001-
   //向左移动3将使其变为00001000,即8-
   a = a << 3;
   cout << a << endl;
   
   //右移2将使其变为00000010,即2-
   a = a >> 2;
   cout << a << endl;
   return 0;
}

输出结果

这将给出输出-

8
2

请注意,这些运算符的行为与负数有很大不同。有符号负数的右移结果取决于实现。如果左移带符号的数字以使符号位受影响,则结果不确定。

还有2个复杂的运算符,可用于将值直接分配给左侧的值。它们是<< =运算符和>> =运算符。

请参阅https://msdn.microsoft.com/zh-cn/library/336xbhcz.aspx,以详细了解移位运算符。