Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Realiza un desplazamiento aritmético a la derecha en un patrón de bits.
Sintaxis
result = pattern >> amount
Partes
result
Obligatorio. Valor numérico entero. Resultado de cambiar el patrón de bits. El tipo de datos es el mismo que el de pattern.
pattern
Obligatorio. Expresión numérica integral. Patrón de bits que se va a desplazar. El tipo de datos debe ser un tipo entero (SByte, Byte, Short, IntegerUShort, UInteger, o LongULong).
amount
Obligatorio. Expresión numérica. Número de bits para desplazar el patrón de bits. El tipo de datos debe ser Integer o ampliarse a Integer.
Observaciones
Los desplazamientos aritméticos no son circulares, lo que significa que los bits desplazados fuera de un extremo del resultado no se vuelven a introducir en el otro extremo. En un desplazamiento aritmético a la derecha, los bits desplazados más allá de la posición del bit más a la derecha se descartan y el bit más a la izquierda (signo) se propaga a las posiciones de bits vacías a la izquierda. Esto significa que si pattern tiene un valor negativo, las posiciones vacías se establecen en una; de lo contrario, se establecen en cero.
Tenga en cuenta que los tipos Bytede datos , UShort, UIntegery ULong no están firmados, por lo que no hay ningún bit de signo para propagarse. Si pattern es de cualquier tipo sin signo, las posiciones vacías siempre se establecen en cero.
Para evitar el desplazamiento por más bits de los resultados, Visual Basic enmascara el valor de amount con una máscara de tamaño correspondiente al tipo de datos de pattern. El AND binario de estos valores se usa para la cantidad de desplazamiento. Las máscaras de tamaño son las siguientes:
Tipo de datos de pattern |
Máscara de tamaño (decimal) | Máscara de tamaño (hexadecimal) |
|---|---|---|
SByte, Byte |
7 | &H00000007 |
Short, UShort |
15 | &H0000000F |
Integer, UInteger |
31 | &H0000001F |
Long, ULong |
63 | &H0000003F |
Si amount es cero, el valor de result es idéntico al valor de pattern. Si amount es negativo, se toma como un valor sin signo y se enmascara con la máscara de tamaño adecuada.
Los desplazamientos aritméticos nunca generan excepciones de desbordamiento.
Sobrecarga
El >> operador se puede sobrecargar, lo que significa que una clase o estructura puede redefinir su comportamiento cuando un operando tiene el tipo de esa clase o estructura. Si el código usa este operador en una clase o estructura de este tipo, asegúrese de comprender su comportamiento redefinido. Para obtener más información, vea Procedimientos de operador.
Ejemplo
En el ejemplo siguiente se usa el >> operador para realizar cambios aritméticos a la derecha en valores enteros. El resultado siempre tiene el mismo tipo de datos que el de la expresión que se va a desplazar.
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
Los resultados del ejemplo anterior son los siguientes:
result1es 2560 (0000 1010 0000 0000).result2es 160 (0000 0000 1010 0000).result3es 2 (0000 0000 0000 000 0010).result4es 640 (0000 0010 1000 0000).result5es 0 (desplazado 15 lugares a la derecha).
La cantidad de desplazamiento para result4 se calcula como 18 AND 15, que es igual a 2.
En el ejemplo siguiente se muestran los cambios aritméticos en un 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
Los resultados del ejemplo anterior son los siguientes:
negresult1es -512 (1111 1110 0000 0000).negresult2es -1 (se propaga el bit de signo).