Operadores Bitwise Shift

Os operadores de turno deslocam seu primeiro operando para a esquerda (<<) ou para a direita (>>) pelo número de posições especificadas pelo segundo operando.

Sintaxe

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

Ambos os operandos devem ser valores integrais. Estes operadores realizam as conversões aritméticas usuais; O tipo do resultado é o tipo do operando esquerdo após a conversão.

Para deslocamentos para a esquerda, os bits desocupados à direita são definidos como 0. Para deslocamentos para a direita, os bits esquerdos desocupados são preenchidos com base no tipo do primeiro operando após a conversão. Se o tipo for unsigned, eles serão definidos como 0. Caso contrário, eles serão preenchidos com cópias do bit de sinal. Para operadores de turno à esquerda sem estouro, a instrução

expr1 << expr2

é equivalente à multiplicação por 2expr2. Para operadores de turno à direita,

expr1 >> expr2

é equivalente à divisão por 2expr2 se expr1 não estiver assinado ou tiver um valor não negativo.

O resultado de uma operação de deslocamento é indefinido se o segundo operando for negativo ou se o operando direito for maior ou igual à largura em bits do operando esquerdo promovido.

Como as conversões realizadas pelos operadores de turno não fornecem condições de estouro ou subfluxo, as informações podem ser perdidas se o resultado de uma operação de deslocamento não puder ser representado no tipo do primeiro operando após a conversão.

unsigned int x, y, z;

x = 0x00AA;
y = 0x5500;

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

Neste exemplo, x é deslocado para a esquerda oito posições e y é deslocado para a direita oito posições. Os valores deslocados são adicionados, dando 0xAA55, e atribuídos a z.

Deslocar um valor negativo para a direita produz metade do valor original, arredondado para baixo. Por exemplo, -253 (binário 11111111 00000011) deslocado para a direita um bit produz -127 (binário 11111111 10000001). Um positivo 253 muda para a direita para produzir +126.

Os turnos à direita preservam o bit do sinal. Quando um inteiro assinado muda para a direita, o bit mais significativo permanece definido. Quando um inteiro não assinado se desloca para a direita, o bit mais significativo é limpo.

Ver também

Operadores de turno esquerdo e turno direito (>> e <<)