Compartilhar via


Operador >> (Visual Basic)

Executa um deslocamento aritmético à direita em um padrão de bit.

Sintaxe

result = pattern >> amount  

Partes

result
Obrigatórios. Valor numérico integral. O resultado do deslocamento do padrão de bit. O tipo de dados é o mesmo que o de pattern.

pattern
Obrigatórios. Expressão numérica integral. O padrão de bit a ser deslocado. O tipo de dados deve ser um tipo integral (SByte, Byte, Short, UShort, Integer, UInteger, Long ou ULong).

amount
Obrigatórios. Expressão numérica. O número de bits para deslocar o padrão de bit. O tipo de dados deve ser Integer ou ampliado para Integer.

Comentários

Os deslocamentos aritméticos não são circulares, o que significa que os bits deslocados de uma extremidade do resultado não são reintroduzidos na outra extremidade. Em um deslocamento aritmético para a direita, os bits deslocados além da posição de bit mais à direita são descartados, e o bit mais à esquerda (sinal) é propagado para as posições de bit desocupadas à esquerda. Isso significa que, se pattern tiver um valor negativo, as posições desocupadas serão definidas como uma; caso contrário, elas serão definidas como zero.

Observe que os tipos de dados Byte, UShort, UInteger e ULong não têm sinal, portanto, não há nenhum bit de sinal a ser propagado. Se pattern for de qualquer tipo sem sinal, as posições desocupadas sempre serão definidas como zero.

Para evitar o deslocamento de mais bits do que o resultado pode conter, o Visual Basic mascara o valor de amount com uma máscara de tamanho correspondente ao tipo de dados de pattern. O AND binário desses valores é usado para a quantidade de deslocamento. As máscaras de tamanho são as seguintes:

Tipo de dados de pattern Máscara de tamanho (decimal) Máscara de tamanho (hexadecimal)
SByte, Byte 7 &H00000007
Short, UShort 15 &H0000000F
Integer, UInteger 31 &H0000001F
Long, ULong 63 &H0000003F

Se amount for zero, o valor de result será idêntico ao de pattern. Se amount for negativo, ele será tomado como um valor sem sinal e mascarado com a máscara de tamanho apropriada.

As mudanças aritméticas nunca geram exceções de estouro.

Sobrecarga

O operador >> pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou estrutura. Se o código usar esse operador em uma classe ou estrutura, certifique-se de entender seu comportamento redefinido. Para obter mais informações, confira Procedimentos de operador.

Exemplo

O exemplo a seguir usa o operador >> para executar turnos aritméticos à direita em valores integrais. O resultado sempre tem o mesmo tipo de dados que o da expressão que está sendo deslocada.

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

Os resultados do exemplo anterior são os seguintes:

  • 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 (deslocado 15 casas à direita).

O valor de deslocamento para result4 é calculado como 18 E 15, que é igual a 2.

O exemplo a seguir mostra as mudanças aritméticas em um valor 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

Os resultados do exemplo anterior são os seguintes:

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

  • negresult2 é -1 (o bit de sinal é propagado).

Confira também