Operadores de desplazamiento bit a bit

Los operadores de desplazamiento desplazan su primer operando a la izquierda (<<) o a la derecha (>>) por el número de posiciones que especifica el segundo operando.

Sintaxis

shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression

Ambos operandos deben ser valores enteros. Estos operadores realizan las conversiones aritméticas habituales; el tipo del resultado es el tipo del operando izquierdo después de la conversión.

Para los desplazamientos hacia la izquierda, los bits de la derecha desalojados se establecen en 0. Para los desplazamientos hacia la derecha, los bits izquierdos vacíos se rellenan en función del tipo del primer operando después de la conversión. Si el tipo es unsigned, se establecen en 0. De lo contrario, se rellenan con copias del bit de signo. Para los operadores de desplazamiento a la izquierda sin desbordamiento, la instrucción

expr1 << expr2

equivale a la multiplicación en 2expr2. Para los operadores de desplazamiento derecho,

expr1 >> expr2

es equivalente a la división en 2expr2 si expr1 no está firmado o tiene un valor no negativo.

El resultado de una operación de desplazamiento no está definido si el segundo operando es negativo o si el operando derecho es mayor o igual que el ancho en bits del operando izquierdo promocionado.

Dado que las conversiones realizadas por los operadores de desplazamiento no proporcionan condiciones de desbordamiento o subflujo, la información se puede perder si el resultado de una operación de desplazamiento no se puede representar en el tipo del primer operando después de la conversión.

unsigned int x, y, z;

x = 0x00AA;
y = 0x5500;

z = ( x << 8 ) + ( y >> 8 );

En este ejemplo, x se desplaza a la izquierda ocho posiciones y y se desplaza a la derecha ocho posiciones. Los valores desplazados se agregan, proporcionan 0xAA55 y se asignan a z.

Al cambiar un valor negativo a la derecha se produce la mitad del valor original redondeado hacia abajo. Por ejemplo, -253 (11111111 00000011 binario) desplazado hacia la derecha un bit produce -127 (11111111 10000001 binarios). Un positivo 253 cambia a la derecha para producir +126.

Los desplazamientos a la derecha conservan el bit de signo. Cuando un entero con signo cambia a la derecha, el bit más significativo permanece establecido. Cuando un entero sin signo cambia a la derecha, se borra el bit más significativo.

Consulte también

Operadores de desplazamiento a la izquierda y de desplazamiento a la derecha (>> y <<)