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


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

左移运算符导致 shift-expression 中的位向左移动 additive-expression 指定的位数。移位操作腾出的位位置将用零填充。左移是逻辑移位(移出末尾的位将被丢弃,包括符号位)。

右移运算符导致 shift-expression 中的位模式向右移动 additive-expression 指定的位数。对于无符号数,移位操作腾出的位位置将用零填充。对于有符号数,符号位将用于填充腾出的位位置。换句话说,如果数字为正,则使用 0,如果数字为负,则使用 1。

示例

#include<iostream>
using namespace std;
int main() {
   int a = 1, b = 3;
   
   // a right now is 00000001
   // Left shifting it by 3 will make it 00001000, ie, 8
   a = a << 3;
   cout << a << endl;
   
   // Right shifting a by 2 will make it 00000010, ie, 2
   a = a >> 2;
   cout << a << endl;
   return 0;
}

输出

这将给出以下输出:

8
2

请注意,这些运算符在处理负数时行为差异很大。对有符号负数进行右移的结果取决于实现。如果将有符号数左移,从而影响符号位,则结果未定义。

还有两个复杂的运算符可以直接将值赋给左边的值。它们是 <<= 运算符和 >>= 运算符。

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

更新于:2020年2月11日

7K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告