Condividi tramite


Operatore >> (Visual Basic)

Aggiornamento: novembre 2007

Esegue uno spostamento aritmetico a destra su uno schema di bit.

result = pattern >> amount

Parti

  • result
    Obbligatoria. Valore numerico integrale. Il risultato dello spostamento dello schema di bit. Il tipo di dati corrisponde a quello di pattern.

  • pattern
    Obbligatoria. Espressione numerica integrale. Lo schema di bit da spostare. Il tipo di dati deve essere integrale (SByte, Byte, Short, UShort, Integer, UInteger, Long o ULong).

  • amount
    Obbligatoria. Espressione numerica. Il numero di bit per spostare lo schema di bit. Il tipo di dati deve essere Integer o essere convertito verso il tipo di dati più grande Integer.

Note

Gli spostamenti aritmetici non sono circolari. In altre parole, i bit spostati oltre una delle estremità del risultato non vengono reintrodotti all'altra estremità. In uno spostamento aritmetico a destra, i bit spostati oltre la posizione dei bit all'estrema destra vengono ignorati e il bit all'estrema sinistra (segno) viene propagato nelle posizioni di bit liberate a sinistra. Questo significa che se pattern ha un valore negativo, le posizioni liberate vengono impostate su uno. In caso contrario, vengono impostate su zero.

I tipi di dati Byte, UShort, UInteger e ULong sono senza segno. Non esiste pertanto alcun bit di segno da propagare. Se pattern è di uno dei tipi senza segno, le posizioni liberate sono sempre impostate su zero.

Per impedire lo spostamento di un numero di bit superiore a quello che il risultato può contenere, il valore di amount verrà nascosto con una maschera di dimensioni corrispondente al tipo di dati di pattern. Il valore binario AND di questi valori viene utilizzato per l'entità dello spostamento. Le maschere di 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 è uguale a zero, il valore di result sarà identico al valore di pattern. Se amount è negativo, verrà accettato come valore senza segno e nascosto con la maschera di dimensioni appropriata.

Gli spostamenti aritmetici non generano mai eccezioni di overflow.

Overload

L'operatore >> può essere sottoposto a overload. In altri termini, una classe o una struttura può ridefinirne il comportamento quando un operando specifica il tipo di tale classe o struttura. Se il codice utilizza l'operatore su una classe o una struttura di questo tipo, è importante comprendere il comportamento ridefinito di tale operatore. Per ulteriori informazioni, vedere Routine di operatore.

Esempio

Nell'esempio riportato di seguito l'operatore >> viene utilizzato per eseguire spostamenti aritmetici a destra su valori integrali. Il risultato presenta sempre lo stesso tipo di dati dell'espressione in cui è stato effettuato lo spostamento.

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

Di seguito sono riportati i risultati dell'esempio precedente:

  • 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 (con uno spostamento di 15 posizioni a destra).

L'entità dello spostamento per result4 viene calcolata come 18 AND 15, pari a 2.

Nell'esempio riportato di seguito vengono illustrati gli spostamenti 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

Di seguito sono riportati i risultati dell'esempio precedente:

  • negresult1 è -512 (1111 1110 0000 0000).

  • negresult2 è -1 (il bit di segno è stato propagato).

Vedere anche

Concetti

Operatori aritmetici in Visual Basic

Riferimenti

Operatori di spostamento bit

Operatori di assegnazione

Operatore >>= (Visual Basic)

Precedenza tra gli operatori in Visual Basic

Elenco degli operatori per funzionalità