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?
- Pegue o valor
- Converta para binário
- Complete com zeros à esquerda (até ficar com 32 posições no caso de um int e 64 posições no caso de um long
- 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