Share via


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

シフト演算子は残りの 1 番目のオペランド (シフト <<) または ()>> 目盛りの数を 2 番目のオペランドに指定します。

構文

  • ブール式 :
    加法式

    ブール式の << 加法 の 式の式の 式 の >> 加法

どちらのオペランドも整数である必要があります。これらの演算子は通常の算術変換を実行します ; 結果の型が変換後に左側のオペランドの型です。

leftward シフトでは右に空いたビットは 0 に設定されます。rightward シフトでは左側に空いたビットは変換後に 1 番目のオペランドの型に基づいて塗りつぶされます。型が unsigned 場合それらは 0 に設定されます。それ以外の場合は符号ビットのコピーが格納されます。オーバーフローのない左シフト演算子の場合ステートメント

expr1 << expr2 

2. による乗算と同じです。expr2右シフト演算子の場合

expr1 >> expr2 

expr1 は符号なしであるか負の値が 2expr2 で除算することと同じです。

シフト演算の結果は 2 番目のオペランドが負であるか右オペランドが発生しレベルを左オペランドのビット幅の値以上である場合は未定義です。

シフト演算子で実行される変換がオーバーフローまたはアンダーフローがないため情報はシフト演算の結果は変換後に 1 番目のオペランドの型で表すことができない場合は失われる可能性があります。

unsigned int x, y, z;

x = 0x00AA;
y = 0x5500;

z = ( x << 8 ) + ( y >> 8 );

この例ではx は 8 か所左にシフトされy はから 8 の場所です。0xAA55 を移動できる値は z に追加され割り当てられます。

右に負の値を変えると元の値の半分丸めがあります。たとえば– 253 (バイナリ 11111111 00000011) から 1 ビットは生成されます – 127 (バイナリ 11111111 10000001)。正の 253 は +126 を生成する場合に表示されます。

右シフトは符号ビットを保持します。符号付き整数が右端にシフトすると最上位ビットのままに設定します。符号なし整数が右端にシフトすると最上位ビットがオフにします。

参照

関連項目

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