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,以更詳細地瞭解移位運算子。
廣告