>>-Operator (Visual Basic)
Führt eine arithmetische Verschiebung nach rechts für ein Bitmuster aus.
result = pattern >> amount
Teile
result
Erforderlich. Ganzzahliger numerischer Wert. Das Ergebnis der Verschiebung des Bitmusters. Der Datentyp entspricht dem von pattern.pattern
Erforderlich. Ein ganzzahliger numerischer Ausdruck. Das zu verschiebende Bitmuster. Der Datentyp muss ein ganzzahliger Typ (SByte, Byte, Short, UShort, Integer, UInteger, Long oder ULong) sein.amount
Erforderlich. Ein numerischer Ausdruck. Die Anzahl der Bits, um die das Bitmuster verschoben werden soll. Der Datentyp muss Integer sein oder zu Integer erweitert werden.
Hinweise
Arithmetische Verschiebungen sind nicht zyklisch, d. h., die Bits, die an einem Ende des Ergebnisses durch die Verschiebung herausfallen, werden nicht am anderen Ende wieder eingefügt. Bei einer arithmetischen Verschiebung nach rechts werden die Bits, die über die Bitposition ganz rechts hinaus verschoben werden, verworfen, und das Bit ganz links (Vorzeichenbit) wird in die Bitpositionen übertragen, die links frei werden. Das bedeutet, dass die frei werdenden Positionen auf 1 gesetzt werden, wenn pattern einen negativen Wert hat. Andernfalls werden sie auf 0 (null) gesetzt.
Beachten Sie, dass die Datentypen Byte, UShort, UInteger und ULong kein Vorzeichen enthalten und daher kein Vorzeichenbit weitergegeben werden muss. Wenn pattern ein vorzeichenloser Typ ist, werden die frei werdenden Positionen immer auf 0 (null) gesetzt.
Um eine Verschiebung um mehr Bits, als das Ergebnis aufnehmen kann, zu verhindern, maskiert Visual Basic den Wert von amount mit einer dem Datentyp von pattern entsprechenden Größenmaske. Das binäre AND dieser Werte wird für den Verschiebungsbetrag verwendet. Die Größenmasken lauten wie folgt:
Datentyp von pattern |
Größenmaske (dezimal) |
Größenmaske (hexadezimal) |
---|---|---|
SByte, Byte |
7 |
&H00000007 |
Short, UShort |
15 |
&H0000000F |
Integer, UInteger |
31 |
&H0000001F |
Long, ULong |
63 |
&H0000003F |
Wenn amount 0 (null) ist, ist der Wert von result mit dem Wert von pattern identisch. Wenn amount negativ ist, wird der Wert als Wert ohne Vorzeichen interpretiert und mit der entsprechenden Größenmaske maskiert.
Arithmetische Verschiebungen generieren niemals Überlaufausnahmen.
Überladen
Der Operator >> kann überladen werden. Das bedeutet, dass eine Klasse oder Struktur sein Verhalten neu definiert, wenn ein Operand den Typ dieser Klasse oder Struktur aufweist. Wenn Sie diesen Operator im Code auf eine solche Klasse oder Struktur anwenden, sollten Sie auf jeden Fall sein neu definiertes Verhalten verstehen. Weitere Informationen finden Sie unter Operatorprozeduren (Visual Basic).
Beispiel
In diesem Beispiel werden mit dem Operator >> arithmetische Verschiebungen nach rechts für ganzzahlige Werte ausgeführt. Das Ergebnis hat immer den gleichen Datentyp wie der zu verschiebende Ausdruck.
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
Das vorangehende Beispiel hat folgende Ergebnisse:
result1 ist 2560 (0000 1010 0000 0000).
result2 ist 160 (0000 0000 1010 0000).
result3 ist 2 (0000 0000 0000 0010).
result4 ist 640 (0000 0010 1000 0000).
result5 ist 0 (15 Stellen nach rechts verschoben).
Der Verschiebungsbetrag für result4 wird als 18 AND 15 berechnet, dies ergibt 2.
Im folgenden Beispiel werden arithmetische Verschiebungen in einem negativen Wert veranschaulicht.
Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13
Das vorangehende Beispiel hat folgende Ergebnisse:
negresult1 ist -512 (1111 1110 0000 0000).
negresult2 ist -1 (das Vorzeichenbit wird weitergegeben).
Siehe auch
Referenz
Bitschiebeoperatoren (Visual Basic)
Zuweisungsoperatoren (Visual Basic)
Operatorrangfolge in Visual Basic
Operatoren sortiert nach Funktionalität (Visual Basic)