Bitwise Operators

Olá a todos.

Estava lendo sobre Bitwise Operators, mas confesso que não entendi nada do que o autor disse sobre… :roll: Você pode me ajudar a entender este tópico?

1) O que são Bitwise Operators?
2) Para que servem?
3) Me dê exemplos de códigos com eles;

Aquele abraço,

Olá pcassiano,

  1. Bitwise operators são operadores que manipulam bits, deslocando pra esquerda, ou pra direita, invertendo, fazendo operações lógicas…

  2. Servem para você realizar operações binárias com variáveis numéricas :slight_smile: Aqui e acolá aparecem coisas que a gente precisa usar esses operadores. (Você já deve saber o que são operações binárias com números, deslocamento, essas coisas, senão não vai entender o exemplo que eu vou dar).

  3. Um exemplo que eu uso os operadores de deslocamento (quando programo pra dispositivos restritos, como cartões e celulares): colocar uma variável short (16 bits = 2 bytes) em um array de bytes. Compare assim: se eu tenho o número 1099 e eu quero guardar em um array de “dígitos”, eu tenho que guardar assim:

digitos[0] = 1; digitos[1] = 0; digitos[2] = 9; digitos[3] = 9;

E depois, juntar tudo, fazendo operações como:

numero n = 0; numero = digitos[0] * 1000; // 1000 numero += digitos[1] * 100; // 0 numero += digitos[2] * 10; // 90 numero += digitos[3]; // 9 // numero agora é 1099 de novo

Pra fazer isso entre short e byte, a idéia é a mesma, porém, ao invés de usar multiplicadores na base 10 (como foi nesse exemplo), a gente vai usar multiplicadores na base 2 (que são os deslocamentos binários).

short s = (short) 1099; // 00000100 01001011 byte[] b = new byte[2]; // porque um short tem 2 bytes b[0] = (byte) (s >>> 8); // desloca s 8 bits pra direita, ficando apenas 00000100 b[1] = (byte) (s & 0xFF); // "apaga" o byte mais significativo, com um E lógico, restando apenas o menos significativo

Pronto, o valor de s está dividido em dois bytes. Pra juntar tudo, é só fazer a operação inversa:

short t = 0; t = (short) (b[0] << 8); t += (short) b[1];

Eu não cheguei a testar exatamente esse exemplo, pode ter alguma coisa aí que dê errado, mas a idéia é essa. Não são muitos os casos que você vai precisar desses operadores, mas isso depende de pra qual plataforma você tá programando.

Espero que o exemplo não tenha ficado tão confuso :stuck_out_tongue:

Até mais, :wink:

Olá Crístian,

Muito obrigado pela sua dica

:joia:

Aquele abraço,