Bitwise Operators

2 respostas
P

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,

2 Respostas

C

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:

P

Olá Crístian,

Muito obrigado pela sua dica

:joia:

Aquele abraço,

Criado 21 de agosto de 2006
Ultima resposta 21 de ago. de 2006
Respostas 2
Participantes 2