シフト演算子: >> と <<
expression << expression
expression >> expression
解説
ビット単位シフト演算子は次のとおりです。
右シフト (>>)
左シフト (<<)
両方のオペランドのシフト演算子は、整数型の必要があります。整数の上位変換を実行するで説明した規則に従って必要な昇格。結果の型を使用すると、昇格された左オペランドの型と同じです。値に右シフト式の x の >> y が x/2y、および、左シフト式の x の値 << y is x * 2y.
シフト式の右辺のオペランドが負の場合、または、右オペランド (昇格) の左オペランドのビット数以上の場合、結果は定義されません。右側のオペランドがゼロ (0) の場合は、シフト演算は実行されません。
左シフト演算子の 1 番目のオペランドを 2 番目のオペランドで指定されたビット数で、左にシフトするビット パターンをされます。シフト演算で空いたビットはゼロが設定されます。これは、shift キーを押しし、回転操作ではなく論理シフトです。
右シフト演算子の 1 番目のオペランドを 2 番目のオペランドで指定されたビット数で右にシフトするビット パターンをされます。シフト演算で空いたビットは、符号なしの数量はゼロが充てんされてです。署名された量の符号ビット、空いたビット位置に伝達されます。左のオペランドが符号なしの数値の場合、shift キーを押しは、論理シフトです。 それ以外の場合、これは算術シフトです。
Microsoft 固有の仕様 →
負の符号付きの数値を右シフトの結果は、実装に依存です。MicrosoftC++に空いたビット位置は、最上位ビットに反映されます。 その他の実装もそうすることの保証はありません。
使用例
// expre_Shift_Operators.cpp
// compile with: /EHsc
// Demonstrate shift operators
#include <iostream>
using namespace std;
int main() {
cout << "5 times 2 is " << (5 << 1) << endl
<< "20 divided by 4 is " << (20 >> 2) << endl;
}
出力