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+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告