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

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告