>> Operator (Visual Basic)
Hiermee wordt een rekenkundige verschuiving naar rechts uitgevoerd op een bitpatroon.
Syntaxis
result = pattern >> amount
generator
result
Vereist. Integrale numerieke waarde. Het resultaat van het verschuiven van het bitpatroon. Het gegevenstype is hetzelfde als dat van pattern
.
pattern
Vereist. Integrale numerieke expressie. Het bitpatroon dat moet worden verschoven. Het gegevenstype moet een integraal type zijn (SByte
, Byte
, Short
, UShort
, Integer
, UInteger
of Long
ULong
).
amount
Vereist. Numerieke expressie. Het aantal bits dat het bitpatroon moet worden verplaatst. Het gegevenstype moet worden Integer
uitgebreid of uitgebreid tot Integer
.
Opmerkingen
Rekenkundige verschuivingen zijn niet cirkelvormig, wat betekent dat de bits die van het ene uiteinde van het resultaat zijn verschoven, niet opnieuw worden geïntroduceerd aan het andere uiteinde. In een rekenkundige rechter shift worden de bits die buiten de meest rechtse bitpositie liggen, verwijderd en wordt de meest linkse bit (teken) doorgegeven aan de bitposities aan de linkerkant. Dit betekent dat als pattern
deze een negatieve waarde heeft, de onbezette posities zijn ingesteld op één, anders worden ze ingesteld op nul.
Houd er rekening mee dat de gegevenstypen Byte
, UShort
en UInteger
niet-ondertekend ULong
zijn, dus er is geen tekenbit die moet worden doorgegeven. Als pattern
een niet-ondertekend type is, worden de onbezette posities altijd ingesteld op nul.
Om te voorkomen dat er meer bits worden verplaatst dan het resultaat kan bevatten, maskert Visual Basic de waarde van amount
met een groottemasker dat overeenkomt met het gegevenstype van pattern
. Het binaire EN van deze waarden wordt gebruikt voor de verschuivingshoeveelheid. De groottemaskers zijn als volgt:
Gegevenstype van pattern |
Groottemasker (decimaal) | Groottemasker (hexadecimaal) |
---|---|---|
SByte , Byte |
7 | &H00000007 |
Short , UShort |
15 | &H0000000F |
Integer , UInteger |
31 | &H0000001F |
Long , ULong |
63 | &H0000003F |
Als amount
nul is, is de waarde result
gelijk aan de waarde van pattern
. Als amount
dit negatief is, wordt deze als een niet-ondertekende waarde genomen en gemaskeerd met het juiste groottemasker.
Rekenkundige verschuivingen genereren nooit overloop-uitzonderingen.
Overbelasting
De >>
operator kan overbelast worden, wat betekent dat een klasse of structuur het gedrag ervan opnieuw kan definiëren wanneer een operand het type van die klasse of structuur heeft. Als uw code deze operator gebruikt voor een dergelijke klasse of structuur, moet u het opnieuw gedefinieerde gedrag ervan begrijpen. Zie Operator Procedures voor meer informatie.
Opmerking
In het volgende voorbeeld wordt de >>
operator gebruikt om rekenkundige verschuivingen naar rechts uit te voeren op integrale waarden. Het resultaat heeft altijd hetzelfde gegevenstype als dat van de expressie die wordt verschoven.
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
De resultaten van het voorgaande voorbeeld zijn als volgt:
result1
is 2560 (0000 1010 0000 0000).result2
is 160 (0000 0000 1010 0000).result3
is 2 (0000 0000 0000 00010).result4
is 640 (0000 0010 1000 0000).result5
is 0 (verschoven 15 plaatsen naar rechts).
Het verschuivingsbedrag result4
wordt berekend als 18 EN 15, die gelijk is aan 2.
In het volgende voorbeeld ziet u rekenkundige verschuivingen op een negatieve waarde.
Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13
De resultaten van het voorgaande voorbeeld zijn als volgt:
negresult1
is -512 (1111 1110 0000 0000).negresult2
is -1 (de teken-bit wordt doorgegeven).