Operador de troca de BIT's >>, <<, >>>

Pessoal, estive olhando esse operadores, mas ficou com umas dúvidas.

Pelo que entendi esses operadores fazem os bit’s caminharem de um lado pro outro, e isso altera o valor de uma váriável…

Bem, se alguém puder me ajudar, eu gostaria de saber um exemplo de uma situação onde eu precise usar isso. Pra que serve exatamente? Onde usar? Como vou saber o valor exato do resultado de um operação como esta?

valeu

té +

olá
bom ele nao tem um uso necessario. mas , assim como o operador i++, é um operador que funciona mais rapido que os outros ja q trabalha diretamente com os bits e nao tem q criar variaveis para somar, mais velocidade ja q usa menos o processador!

tem um macete pra usalo. assim :
quando eu faco :
x =x << 4; eh a mesma coisa que dizer
x = x* 2**4; // isso nao funciona em java eh so um exemplo
ou seja…x vezes dois elevado a quarta
e o operador
x=x >> 4; eh a mesma coisa so que divide . x recebe x dividido por 2 elevado a quarta

entao eh o seguinte…o , o operador da direita vai ser o expoente do numero dois sempre.
entao x<<5; quer dizer x vezes 2 elevado a 5. e o operador << significa multiplicacao e o >> divisao.

bom faz tempo q nao vejo isso…mas acho q eh isso.
qq coisa posta ai
[]'s
ja o >>> eh mais complexo, ele vai manter o numero sempre positivo mesmo se o resultado da operacao for negativa.

[quote=“JavaNight”]olá
bom ele nao tem um uso necessario. mas , assim como o operador i++, é um operador que funciona mais rapido que os outros ja q trabalha diretamente com os bits e nao tem q criar variaveis para somar, mais velocidade ja q usa menos o processador!

tem um macete pra usalo. assim :
quando eu faco :
x =x << 4; eh a mesma coisa que dizer
x = x* 2**4; // isso nao funciona em java eh so um exemplo
ou seja…x vezes dois elevado a quarta
e o operador
x=x >> 4; eh a mesma coisa so que divide . x recebe x dividido por 2 elevado a quarta

entao eh o seguinte…o , o operador da direita vai ser o expoente do numero dois sempre.
entao x<<5; quer dizer x vezes 2 elevado a 5. e o operador << significa multiplicacao e o >> divisao.

bom faz tempo q nao vejo isso…mas acho q eh isso.
qq coisa posta ai
[]'s
ja o >>> eh mais complexo, ele vai manter o numero sempre positivo mesmo se o resultado da operacao for negativa.[/quote]

>> adiciona um bit a direita (adicionando 1 para o expoente).

Se o numero era 2² (4) entao 4 >> 1 = 2³
Já o << é justamente o contrário, ele corta o bit menos significativo…

8 = 1000 em binário
8 >> 1 vira 10000 (ou seja, 16)
8 << 1 vira 100 (ou seja, 4)

De uma olhadinha na pasta do seu JDK, tem uma pasta Demo/Applets (se for o jdk da sun, apesar de que não conheço nínguem que não tenha) Procura por TicTacToe(Jogo da velha) e de uma olhada no código… uma ótima utilização… se vc se esforçar um poko consegue entender legal heheh… qlqr coisa soh perguntar.

[quote=“mavi”][quote=“JavaNight”]olá
bom ele nao tem um uso necessario. mas , assim como o operador i++, é um operador que funciona mais rapido que os outros ja q trabalha diretamente com os bits e nao tem q criar variaveis para somar, mais velocidade ja q usa menos o processador!

tem um macete pra usalo. assim :
quando eu faco :
x =x << 4; eh a mesma coisa que dizer
x = x* 2**4; // isso nao funciona em java eh so um exemplo
ou seja…x vezes dois elevado a quarta
e o operador
x=x >> 4; eh a mesma coisa so que divide . x recebe x dividido por 2 elevado a quarta

entao eh o seguinte…o , o operador da direita vai ser o expoente do numero dois sempre.
entao x<<5; quer dizer x vezes 2 elevado a 5. e o operador << significa multiplicacao e o >> divisao.

bom faz tempo q nao vejo isso…mas acho q eh isso.
qq coisa posta ai
[]'s
ja o >>> eh mais complexo, ele vai manter o numero sempre positivo mesmo se o resultado da operacao for negativa.[/quote]

>> adiciona um bit a direita (adicionando 1 para o expoente).

Se o numero era 2² (4) entao 4 >> 1 = 2³
Já o << é justamente o contrário, ele corta o bit menos significativo…

8 = 1000 em binário
8 >> 1 vira 10000 (ou seja, 16)
8 << 1 vira 100 (ou seja, 4)[/quote]

8 = 1000 em binário
8 >> 1 vira 10000 (ou seja, 16) // negartivo…aqui o resultado eh 4
8 << 1 vira 100 (ou seja, 4)[/quote] e aqui sim o resultado eh 16

acho que vc ta confundindo os lados…normal.
o sinal mostra justamento o lado pelo qual o bit se movimenta
se eh 8 (1000) e o sinal eh >> …entao o bit vai pra onde o sinal aponta (direita) ai fica 0100…e ele leva em conta o sinal ainda q vc esqueceu de dizer
falow

e ele completa a sequencia com 0’s?
tipo:
1000 >> 2 = xx10
no caso, os x seriam completados com 0, é isso?

uma vez, acho que li algo sobre completar com 1. alguem pode me falar mais sobre isso?

ó la…

http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&t=11837