Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.