>> 演算子 (Visual Basic)

ビット パターンに対して算術右シフトを実行します。

構文

result = pattern >> amount  

指定項目

result
必須です。 整数数値。 ビット パターンをシフトした結果。 データ型は pattern のデータ型と同じです。

pattern
必須です。 整数数値式。 シフトするビット パターン。 データ型は、整数型 (SByteByteShortUShortIntegerUIntegerLong、または ULong) である必要があります。

amount
必須です。 数値式。 ビット パターンをシフトするビット数。 データ型は Integer であるか、Integer に拡大変換する必要があります。

Remarks

算術シフトは循環ではありません。つまり、結果の一方の端からシフトされたビットはもう一方の端に再入されません。 算術右シフトでは、右端のビット位置を超えてシフトされたビットは破棄され、左端 (符号) ビットは左側の空いたビット位置に伝搬されます。 したがって、pattern に負の値がある場合、空いている位置は 1 に設定されます。それ以外の場合は 0 に設定されます。

ByteUShortUInteger、および ULong データ型は符号なしであるため、伝搬する符号ビットはありません。 pattern が符号なしの型の場合、空いている位置は常に 0 に設定されます。

結果で保持できるよりも多くのビットがシフトされないようにするため、Visual Basic は pattern のデータ型に対応するサイズ マスクを使用して amount の値をマスクします。 これらの値のバイナリ AND がシフト量に使用されます。 サイズ マスクを次に示します。

pattern のデータ型 サイズ マスク (10 進数) サイズ マスク (16 進数)
SByteByte 7 &H00000007
ShortUShort 15 &H0000000F
IntegerUInteger 31 &H0000001F
LongULong 63 &H0000003F

amount が 0 の場合、result の値は pattern の値と同じになります。 amount が負の場合は、符号なしの値として扱われ、適切なサイズ マスクでマスクされます。

算術シフトではオーバーフロー例外は生成されません。

オーバーロード

>> 演算子は "オーバーロード" できます。つまり、オペランドがクラスまたは構造体の型を持っているときに、クラスまたは構造体はその動作を再定義できます。 コードで、そのようなクラスまたは構造体に対してこの演算子が使用される場合は、再定義された動作を理解していることを確認してください。 詳細については、「 Operator Procedures」を参照してください。

次の例では、>> 演算子を使用して、整数値に対して算術右シフトを実行しています。 結果のデータ型は、シフトする式のデータ型と常に同じになります。

Dim pattern As Short = 2560
' The bit pattern is 0000 1010 0000 0000.
Dim result1, result2, result3, result4, result5 As Short
result1 = pattern >> 0
result2 = pattern >> 4
result3 = pattern >> 10
result4 = pattern >> 18
result5 = pattern >> -1

前の例の結果は次のようになります。

  • result1 は 2560 (0000 1010 0000 0000) です。

  • result2 は 160 (0000 0000 1010 0000) です。

  • result3 は 2 (0000 0000 0000 0010) です。

  • result4 は 640 (0000 0010 1000 0000) です。

  • result5 は 0 (右に 15 桁シフト)。

result4 のシフト量は 18 AND 15 として計算されます。これは 2 と同等です。

次の例は、負の値に対する算術シフトを示しています。

Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13

前の例の結果は次のようになります。

  • negresult1 は -512 (1111 1110 0000 0000) です。

  • negresult2 は -1 です (符号ビットが伝播されます)。

関連項目