O que é isso (1<<1)?

6 respostas
H

:?: Alguém poderia me explicar o que faz esse código? :idea:

System.out.println(1<<1); imprime 2
System.out.println(1<<2); imprime 4
System.out.println(1<<3); imprime 8
System.out.println(2>>>1); imprime 1

Não estou sacando a lógica disso…

6 Respostas

M

Isso é deslocamento de bits.

1 em binário é 0001

Quando você faz 1 << 1 desloca um bit para a esquerda ficando 0010
que em decimal é 2.

tRuNkSnEt

Complentando a pergunta, em que eu posso utilizar isso como vantagem?

A

de cara nao tinha entendido muito bem isso, mas prestando atencao na respostado marcus eu entendi, como eu me conheco e se isso tivesse caido em uma prova de certificação eu teria rodado bonito, nao teria pensado nisso nao, respondendo a pergunta do tRuNkSnEt isso seria mais um exercicio de logica do que teria alguma aplicação em algum lugar, se eu estiver errado que vcs comentem, pois so vi isso como utilidade.

abs.

saoj

Vc usa muito isso quando vc está trabalhando no nível dos bits.

Exemplos:

  1. Quero usar um byte para guardar umas flags. Posso ter no máximo 8 flags porque um byte tem oito bits. Isso é muito mais econômico do que usar 8 booleans!

1 0 1 0 0 1 1 1
7 6 5 4 3 2 1 0

Quero setar o bit 3, que está 0, então como é que eu faço ???

// b é um byte...

b = (1 << 3 | b);
  1. Como eu represento um inteiro em Java (32 bits) unsigned como uma sequencia de 4 bytes ???
private byte [] getHeader(int x) {
        byte[] aryx = new byte[4];
        aryx[0] = (byte) ((x >> 24) & 0xFF);
        aryx[1] = (byte) ((x >> 16) & 0xFF);
        aryx[2] = (byte) ((x >> 8) & 0xFF);
        aryx[3] = (byte) (x & 0xFF);
        return aryx;

Eu uso isso para implementar um protocolo com payload, isto é, os primeiros 4 bytes da comunicação servem para dizer qual é o tamanho do objeto que está vindo. Java NIO só trabalha com bytes e não tem aquela mamata de ObjectInputStream com socket.

:wink:

A

saoj,

vc tem razao disso, tinha me esquecido, hj eu continuo com sono, sem pensar muito !!! mas esclareceu uma duvida minha tb ! !!
rsrsr

Roan

Pode ser utilizado para o tratamento de imagens também, quando você precisa, por exemplo, fazer um espelhamento de uma determinada imagem.

Criado 2 de agosto de 2005
Ultima resposta 3 de ago. de 2005
Respostas 6
Participantes 6