ビット パターンに対して算術右シフトを実行します。
構文
result = pattern >> amount
部品
result
必須。 整数の数値。 ビット パターンをシフトした結果。 データ型は、 pattern
のデータ型と同じです。
pattern
必須。 整数数値式。 シフトするビット パターン。 データ型は、整数型 (SByte
、 Byte
、 Short
、 UShort
、 Integer
、 UInteger
、 Long
、または ULong
) である必要があります。
amount
必須。 数値式。 ビット パターンをシフトするビット数。 データ型は、 Integer
または拡大して Integer
する必要があります。
注釈
算術シフトは循環ではなく、結果の一方の端からシフトされたビットがもう一方の端で再導入されないことを意味します。 算術右シフトでは、右端のビット位置を超えてシフトされたビットは破棄され、左端 (符号) ビットは左側の空いたビット位置に伝達されます。 つまり、 pattern
に負の値がある場合、空いた位置は 1 に設定され、それ以外の場合は 0 に設定されます。
データ型 Byte
、 UShort
、 UInteger
、および ULong
は符号なしであるため、伝達する符号ビットがないことに注意してください。
pattern
が符号なし型の場合、空の位置は常に 0 に設定されます。
結果が保持できるビット数を超えるシフトを防ぐために、Visual Basic では、pattern
のデータ型に対応するサイズ マスクを使用してamount
の値をマスクします。 これらの値のバイナリ AND はシフト量に使用されます。 サイズ マスクは次のとおりです。
のデータ型 pattern |
サイズ マスク (10 進数) | サイズ マスク (16 進数) |
---|---|---|
SByte 、Byte |
7 | &H00000007 |
Short 、UShort |
15 | &H0000000F |
Integer 、UInteger |
31 | &H0000001F |
Long 、ULong |
63 | &H0000003F |
amount
が 0 の場合、result
の値は pattern
の値と同じです。
amount
が負の値の場合は、符号なし値として取得され、適切なサイズ マスクでマスクされます。
算術シフトではオーバーフロー例外は生成されません。
オーバーロード
>>
演算子はオーバーロードできます。つまり、オペランドがそのクラスまたは構造体の型を持つ場合、クラスまたは構造体はその動作を再定義できます。 コードでこのようなクラスまたは構造体でこの演算子を使用する場合は、再定義された動作を理解していることを確認してください。 詳細については、「 演算子プロシージャ」を参照してください。
例
次の例では、 >>
演算子を使用して、整数値に対して算術右シフトを実行します。 結果のデータ型は常に、シフトされる式のデータ型と同じです。
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 と 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 (符号ビットが伝達されます)。
こちらも参照ください
.NET