Alguém exemplo usando Java BitWise

Oi gente, pesquisei, mas não conseguí por mão na massa em exemplos do uso do operador
bitwise (bit a bit), alguém pode me ajudar?

Uai. Te dou um agora.

Imagine a seguinte situação: você deseja armazenar as permissões de um arquivo. E deseja armazenar leitura, execução e escrita em um mesmo campo.
Então opta por um valor numérico qualquer. Um inteiro.

O primeiro bit, que representa 1, é leitura
O segundo bit, que representa 2, é execução
O terceiro bit, que representa 4, é escrita

Então, no seu banco de dados, você tem um arquivo x com o campo permissões com o valor 5. Como obter as permissões dele? Você usa o operador and.

if (5 & 1 == 1) você tem leitura, porque a representação em binário é 101 -> 101 & 001 = 001 = 4
if (5 & 4 == 4) você tem escrita, porque a representação em binário é 101 -> 101 & 100 = 100 = 4

Sacou?

hmmm… puxa, não entendí ainda, entendí que uso um bit pra representar um procedimento, só isso que entendí… não enxerguei tb o uso do “^”…

& representa uma operação and sobre os bits.

Então, o que rola. Suponha que você tenha o número 4. Em binário, ele representa, simplificando, 100

Quando você executa o operador and neste valor, passa como segundo argumento outro valor de preferência do mesmo tipo.
Suponha que eu passe como outro operando o valor 4 nesta expressão.

4 & 4

isto equivale a fazer a seguinte operação

100 & 100 <- Binário

A operação é bit a bit, e o resultado, é um array de bits, que o Java vai converter direto pra inteiro.

100 & 100 =

1 & 1 == 1
0 & 0 == 0
0 & 0 == 0

100 == 4 em binário

Sacou?

O mesmo se dá com o operador bitwise or (que é | em Java)

Se quiser ver um exemplo bastante sofisticado de uso de operadores bitwise veja esse programa que faz esteganografia:
http://www.guj.com.br/posts/list/221679.java#1134695

Ele pega um arquivo qualquer, e vai lendo byte-a-byte. Cada byte é então dividido, e colocado nos bits menos significativos de cada um dos 3 canais de cor de uma imagem. O arquivo é então literalmente “escondido” no interior da imagem.

O programa também consegue fazer o processo inverso. Aliás, o código fonte dele e o arquivo manifest estão escondidos na logo do GUJ no tópico.

Aí dentro, muita ginástica com operadores bitwise é utilizada.

[quote=ViniGodoy]Se quiser ver um exemplo bastante sofisticado de uso de operadores bitwise veja esse programa que faz esteganografia:
http://www.guj.com.br/posts/list/221679.java#1134695

Ele pega um arquivo qualquer, e vai lendo byte-a-byte. Cada byte é então dividido, e colocado nos bits menos significativos de cada um dos 3 canais de cor de uma imagem. O arquivo é então literalmente “escondido” no interior da imagem.

O programa também consegue fazer o processo inverso. Aliás, o código fonte dele e o arquivo manifest estão escondidos na logo do GUJ no tópico.

Aí dentro, muita ginástica com operadores bitwise é utilizada.

[/quote]

Eu li sua explicacao e vi o jar que vc postou, so nao entendi como vc faz pra ler os canais da imagem.

Uso o método getPixel da classe BufferedImage.

Ele me retorna um inteiro, contendo 4 bytes. Os bytes estão organizados no formato ARGB, ou seja, o primeiro byte do int para o canal alfa, e os demais para os canais red, green e blue.