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.