Informática NumaBoa Aprenda Java fazendo Applets
Conceitos Básicos:
OPERADORES BIT-A-BIT

Notice: Undefined variable: idx in /home/numaboa.com.br/public_html/informatica/java/head.php on line 19
Java NumaBoa



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 OR
Operador AND
Operador XOR
Operador NOT
Operadores de deslocamento


OPERADOR OR BIT-A-BIT

A operação lógica OR significa operação lógica OU e é representada por ||. O operador OR 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 um dos valores "ORados" possuir um 1 na mesma posição de bit. Se os dois valores tiverem um 0 (zero) na posição de bit, o operador retornará o valor 0. Veja os exemplos na tabela abaixo:


Operação: int_1 || int_2
Valor Decimal Valor Binário
int_1 = 6 0 0 0 0 0 1 1 0
int_2 = 4 0 0 0 0 0 1 0 0
Resultado OR ( || ) 0 0 0 0 0 1 1 0

Operação: boolean_1 || boolean_2
Valor Lógico Valor Binário
boolean_1 = TRUE 1
boolean_2 = FALSE 0
Resultado OR ( || ) 1

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:


Operação: int_1 & int_2
Valor Decimal Valor Binário
int_1 = 6 0 0 0 0 0 1 1 0
int_2 = 4 0 0 0 0 0 1 0 0
Resultado AND (&) 0 0 0 0 0 1 0 0

Operação: boolean_1 & boolean_2
Valor Lógico Valor Binário
boolean_1 = TRUE 1
boolean_2 = FALSE 0
Resultado AND (&) 0

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.


Cor Valor Decimal Trio Decimal Valor Hexadecimal
Vermelho 16 711 680 255, 0, 0 FF 00 00  
Verde 65 280 0, 255, 0 00 FF 00  
Azul 255 0, 0, 255 00 00 FF  
Amarelo 16 776 960 255, 255, 0 FF FF 00  
Magenta 16 711 935 255, 0, 255 FF 00 FF  
Turqueza 65 535 0, 255, 255 00 FF FF  
Areia 16 777 164 255, 255, 204 FF FF CC  

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.


Valores referentes à cor pesquisada (Areia)
Valor Binário da Cor 11111111 11111111 11001100
Valor Hexadecimal da Cor FF FF CC
Valor Decimal da Cor 16 777 164

Máscara para extrair o valor do Vermelho
Valor Binário 11111111 00000000 00000000
Valor Hexadecimal FF 00 00
Valor Decimal 16 711 680
Máscara para extrair o valor do Verde
Valor Binário 00000000 11111111 00000000
Valor Hexadecimal FF 00
Valor Decimal 65 280
Máscara para extrair o valor do Azul
Valor Binário 00000000 00000000 11111111
Valor Hexadecimal FF
Valor Decimal 255

Operação & (AND) para extrair o Vermelho
Valor Binário da Cor 11111111 11111111 11001100
Máscara para vermelho 11111111 00000000 00000000
Resultado binário da operação & 11111111 00000000 00000000
Resultado hexadecimal FF 00 00
Resultado decimal 16 711 680

Operação & (AND) para extrair o Verde
Valor Binário da Cor 11111111 11111111 11001100
Máscara para verde 00000000 11111111 00000000
Resultado binário da operação & 00000000 11111111 00000000
Resultado hexadecimal 00 FF 00
Resultado decimal 65 280

Operação & (AND) para extrair o Azul
Valor Binário da Cor 11111111 11111111 11001100
Máscara para azul 00000000 00000000 11111111
Resultado binário da operação & 00000000 00000000 11001100
Resultado hexadecimal 00 00 CC
Resultado decimal 204

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:


Operação: int_1 ^ int_2
Valor Decimal Valor Binário
int_1 = 6 0 0 0 0 0 1 1 0
int_2 = 4 0 0 0 0 0 1 0 0
Resultado XOR ( ^ ) 0 0 0 0 0 0 1 0

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:


Operação: ~ int_1
Valor Decimal Valor Binário
int_1 = 6 0 0 0 0 0 1 1 0
Resultado NOT ( ~ ) 1 1 1 1 1 0 0 1

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.




| AAAA | Página Inicial | Mapa do Site | Novidades | Busca | Indique esta página | Mestre da Teia | Voltar |
| Localizador || @ Info NumaBoa > Java NumaBoa > Operadores bit a bit
Créditos: vovó Vicki

webdesign sobMedida by vickiSoft - /informatica/java/matBitBit.php (14.01.01) versão 1.1 de 13.07.03
Licença Creative Commons 1998-2006 Aldeia NumaBoa
Exceto onde especificamente declarado, todo material deste site é disponibilizado de acordo com a Licença Creative Commons.