シフト演算子: >> と <<

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;
}

出力

  
  

参照

関連項目

二項演算子を含む式

C++ の演算子

演算子の優先順位と結合規則

概念

ビットごとのシフト演算子