Código de Exemplo
int a = 40; // binário: 0000000000101000
int b = a >> 3; // binário: 0000000000000101, ou 5 em decimal
Notas e Advertências
Quando você desloca x à direita por y bits (x >> y), e o bit mais significativo em x é 1, o comportamento depende do tipo de dado de x. Se x é do tipo int, o bit mais significativo é o bit de sinal, determinando se x é negativo ou não, como pode ser visto com detalhes na página do tipo de dado int
. Nesse caso, o bit de sinal é copiado para os bits menos significativos quando o valor é deslocado, por razões históricas:
int x = -16; // binário: 1111111111110000
int y = 3;
int resultado = x >> y; // binário: 1111111111111110
Esse comportamento, chamado extensão do sinal, é frequentemente indesejável. Em vez disso, você pode quere que zeros sejam deslocados da esquerda. Acontece que as regras do deslocamento à direita são diferentes para expressões unsigned int
, estão você pode usar casting para impedir que uns sejam copiados da esquerda:
int x = -16; // binário: 1111111111110000
int y = 3;
int resultado = (unsigned int)x >> y; // binário: 0001111111111110
Se você for cuidadoso para evitar a extensão do sinal, você pode usar o operador de deslocamento à direita >>
como uma forma de dividir por potências de 2. Por exemplo:
int x = 1000;
int y = x >> 3; // divisão inteira de 1000 por 8, resultando em y = 125.