Operatore >> (Visual Basic)
Esegue uno scorrimento a destra aritmetico in un modello di bit.
Sintassi
result = pattern >> amount
Parti
result
Obbligatorio. Valore numerico integrale. Risultato dello spostamento del modello di bit. Il tipo di dati è uguale a quello di pattern
.
pattern
Obbligatorio. Espressione numerica integrale. Modello di bit da spostare. Il tipo di dati deve essere un tipo integrale (SByte
, Byte
, Short
, UShort
, Integer
, UInteger
, Long
o ULong
).
amount
Obbligatorio. Espressione numerica. Numero di bit per spostare il modello di bit. Il tipo di dati deve essere Integer
o esteso a Integer
.
Osservazioni:
I turni aritmetici non sono circolari, il che significa che i bit spostati da un'estremità del risultato non vengono reintrodotti all'altra estremità. In uno spostamento aritmetico a destra, i bit spostati oltre la posizione più a destra vengono eliminati e il bit (segno) più a sinistra viene propagato nelle posizioni di bit liberate a sinistra. Ciò significa che se pattern
ha un valore negativo, le posizioni liberate vengono impostate su uno; in caso contrario, vengono impostate su zero.
Si noti che i tipi di dati Byte
, UShort
, UInteger
e ULong
non hanno segni, quindi non è necessario propagare alcun segno. Se pattern
è di qualsiasi tipo senza segno, le posizioni liberate vengono sempre impostate su zero.
Per evitare lo spostamento di più bit rispetto al risultato, Visual Basic maschera il valore di amount
con una maschera di dimensioni corrispondente al tipo di dati di pattern
. L'AND binario di questi valori viene utilizzato per la quantità di spostamento. Le maschere delle dimensioni sono le seguenti:
Tipo di dati di pattern |
Maschera di dimensioni (decimale) | Maschera di dimensioni (esadecimale) |
---|---|---|
SByte , Byte |
7 | &H00000007 |
Short , UShort |
15 | &H0000000F |
Integer , UInteger |
31 | &H0000001F |
Long , ULong |
63 | &H0000003F |
Se amount
è zero, il valore di result
è identico al valore di pattern
. Se amount
è negativo, viene preso come valore senza segno e mascherato con la maschera di dimensione appropriata.
I turni aritmetici non generano mai eccezioni di overflow.
Overload
L'operatore >>
può essere sottoposto a overload, il che significa che una classe o una struttura può ridefinirne il comportamento quando un operando ha il tipo di tale classe o struttura. Se il codice usa questo operatore in una classe o una struttura di questo tipo, assicurarsi di comprenderne il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Esempio
Nell'esempio seguente viene utilizzato l'operatore >>
per eseguire spostamenti aritmetici a destra sui valori integrali. Il risultato ha sempre lo stesso tipo di dati di quello dell'espressione spostata.
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
I risultati dell'esempio precedente sono i seguenti:
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 (spostato 15 posizioni a destra).
L'importo dello spostamento per result4
viene calcolato come 18 AND 15, che è uguale a 2.
Nell'esempio seguente vengono illustrati i turni aritmetici su un valore negativo.
Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13
I risultati dell'esempio precedente sono i seguenti:
negresult1
è -512 (1111 1110 0000 0000).negresult2
è -1 (il bit più significativo viene propagato).