| Aprenda Java fazendo Applets OPERADORES BIT-A-BIT |
Notice: Undefined variable: idx in /home/numaboa.com.br/public_html/informatica/java/head.php on line 19 ![]() |
| MEXENDO COM A ALMA DOS NÚMEROS |
Além dos operadores matemáticos usuais, como soma (+), subtração (-), multiplicação (*) e divisão (/), podemos e devemos utilizar outros operadores que facilitam muito a nossa vida. Entre eles, destacam-se os operadores bit-a-bit que permitem mexer na "alma" dos números e têm larga aplicação em applets de efeitos gráficos. A "alma" dos números é a sua composição binária portanto, antes de ler as explicações de operadores bit-a-bit, certifique-se de que NÃO TENHA DÚVIDAS a respeito do sistema binário. Operadores bit-a-bit |
| OPERADOR AND BIT-A-BIT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A operação lógica AND significa operação lógica E e é representada por &. O operador AND funciona em qualquer um dos tipos inteiros de Java e com tipos boolean numa expressão condicional do tipo if(bool1 & bool2). Este operador retorna 1 para cada posição em que os valores "ANDados" possuírem um 1 simultaneamente na mesma posição de bit. Se um dos valores tiver um 0 (zero) na posição de bit, o operador retornará o valor 0. Veja os exemplos na tabela abaixo: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Um exemplo de aplicação prática: Os valores de cores podem ser expressas no modelo RGB através de três pares de valores. O primeiro par corresponde ao vermelho (Red), o segundo par expressa o verde (Green) e o terceiro ao azul (Blue). Cada par varia de 0 a 255 no sistema decimal o que corresponde, na notação hexadecimal, de 00 a FF. Assim, FF0000 corresponde a vermelho, 00FF00 a verde e 0000FF a azul. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Se, por exemplo, quisermos determinar a quantidade de vermelho, de verde e de azul que há na cor Areia, a maneira mais rápida e eficiente é através de uma operação AND bit-a-bit. Conhecendo os valores da cor pesquisada, podemos utilizar "máscaras" para extrair a porção de bits desejada. Utiliza-se 0 (zeros) onde queremos "apagar" bits e 1 onde queremos extrair bits. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Depois dessa salada de bits, como escrever o código em Java? Muito simples: a salada de bits só serviu para explicar o processo; as linhas de código Java são muito fáceis. Veja abaixo: String minhaCor = "FFFFCC" // Cor Areia em hexadecimal int corEmDecimal = Integer.parseInt(minhaCor, 16);// Transforma hexa em decimal int fracaoVermelho = (minhaCor & 0xFF0000); // AND máscara para vermelho int fracaoVerde = (minhaCor & 0xFF00); // AND máscara para verde int fracaoAzul = (minhaCor & 0xFF); // AND máscara para azul | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Pronto ! O resultado será fracaoVermelho = 16 711 680 (ou 0xFF0000), fracaoVerde = 65 280 (ou 0xFF00) e fracaoAzul = 204 (ou 0xCC). A soma das três frações é a cor Areia pesquisada, ou seja, 16 777 164 (ou 0xFFFFCC). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| OPERADOR XOR BIT-A-BIT | ||||||||||
A operação lógica XOR significa operação lógica OU EXCLUSIVO e é representada por ^. O operador XOR funciona em qualquer um dos tipos inteiros de Java. Este operador retorna 1 para cada posição em que um dos valores "XORados" possuir valores opostos na mesma posição de bit. Se ambos os valores tiverem 0 (zeros) ou 1 na posição de bit, o operador retornará o valor 1. Do contrário, retorna 0. Veja os exemplos na tabela abaixo: | ||||||||||
| ||||||||||
| OPERADOR NOT BIT-A-BIT | ||||||||
A operação lógica NOT significa operação lógica NÃO e é representada por ~. O operador NOT funciona em qualquer um dos tipos inteiros de Java. Este operador o valor dos bits do valor "NOTado", ou seja, transforma 1 em 0 e 0 em 1. Veja os exemplos na tabela abaixo: | ||||||||
| ||||||||
| OPERADORES DE DESLOCAMENTO BIT-A-BIT |
O operador de deslocamento bit-a-bit para a esquerda, anotado como <<, faz com que os bits sejam deslocados o número de casas indicadas, ou seja, multiplica-se o número original por 2 elevado ao número de casas indicado. Veja: int meuNro = 3; int meuShift = meuNro << 2; O valor de meuShift é igual a 12. Acompanhe: o valor binário de 3 é 0011. Deslocando os bits duas casas à esquerda teremos 1100, que corresponde a 12. Efetuamos em binário o mesmo que 3 x (2 ao quadrado) ou 3 x 4 = 12. O operador de deslocamento bit-a-bit para a direita, anotado como >>, faz com que os bits sejam deslocados o número de casas indicadas, ou seja, obtém-se o valor inteiro da divisão do número original por 2 elevado ao número de casas indicado. Veja: int nroOriginal = 15; int meuShift = nroOriginal >> 1; O valor de meuShift é igual a 7. Acompanhe: o valor binário de 15 é 1111. Deslocando os bits uma casa à direita teremos 0111, que corresponde a 7. Efetuamos em binário o mesmo que 15 / (2 elevado a 1) ou o inteiro de 15 / 2 = 7. |