Como funciona <<, >> e >>>

os operadores <<, >> e >>> fazem deslocamento binário para esquerda e direita… alguns preenchendo os espaços com zeros, e outros com o valor do sinal. alguem poderia me explicar como funciona isso?

  1. Pegue o valor
  2. Converta para binário
  3. Complete com zeros à esquerda (até ficar com 32 posições no caso de um int e 64 posições no caso de um long
  4. Uma vez feito isso, é fácil você entender << , >> e >>>.

Por exemplo, digamos que você tenha o valor int 1234567890 e você queira saber quanto vale 1234567890 << 2, 1234567890 >> 2 e 1234567890 >>> 2.

Convertendo para binário você vai ter: 1001001100101100000001011010010
Completando com zeros à esquerda você vai ter: 01001001100101100000001011010010

Para fazer a operação “<<” (deslocar bits para a esquerda), ponha a quantidade de zeros especificados (no caso 2) à direita do número (ou seja, de modo que os bits que já existiam do número sejam deslocados para a esquerda), e tire fora os zeros que passarem de 32. No caso acima:

0100100110010110000000101101001000
Isso deu 34 bits. Mas então devemos cortar os 2 bits mais à esquerda fora, e vamos ter no final:

00100110010110000000101101001000

que em decimal dá 643304264.

Para “>>>” você acrescenta zeros, mas à esquerda, de modo que ele desloque os bits para a direita.

Para “>>” é um pouco diferente. Se o primeiro bit do número for zero, ele é a mesmíssima coisa queo “>>>”.
Mas se o primeiro bit do número for 1, em vez de inserir com zeros à esquerda, insere uns à esquerda.


http://download.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
http://www.guj.com.br/posts/list/131363.java#707556

E um exemplo prático do que se pode fazer com isso:
http://www.guj.com.br/posts/list/221679.java#1134695

muito obrigado