XOR Deveria Ser uma Palavra em Português

Sopa xor salada? Esta é uma pergunta muito mais clara do que Sopa ou(or) salada. Porque? Como veremos neste artigo, a palavra XOR não permitiria a escolha de Sopa e Salada como a palavra OR permite. Mas o que é XOR?

ADD, o que voce faz? Eu Adiciono. SUB e voce? Eu subtraio. XOR? Eu? Bem eu…

Comparando XOR com OR

Tabela para a função XOR:

A B XOR
0 0 0
0 1 1
1 0 1
1 1 0

Tabela para a função OR:

A B OR
0 0 0
0 1 1
1 0 1
1 1 1

A única diferença entre XOR e OR ocorre quando A=1 e B=1 onde o resultado é 0 para XOR e 1 para OR.

Na Vida Real, OR(ou inclusivo) ou XOR(ou exclusivo)?

Na vida real falamos OR(ou), mas a Intenção é XOR(ou exclusivo), vejamos alguns exemplos:

Exemplo 1:

Mãe: Filho, onde está o seu pai?

Filho: Trabalhando no jardim ou(OR) no sofá assistindo jogo.

Uma condição exclui a outra, o pai não pode estar trabalhando no jardim e ao mesmo tempo no sofá assistindo ao jogo. Claro que a mãe tem certeza de que, dada as opções, ele está assistindo ao jogo.

Vamos visualizar em uma tabela. Função onde está o seu pai:

Trabalhando no jardim No sofá assistindo jogo Achou Comentario
0 0 0 Não está em nenhum lugar
0 1 1 Achou no sofá (a mãe já sabia)
1 0 1 Achou trabalhando (improvável)
1 1 0 Inválido, não pode estar nos 2 lugares ao mesmo tempo

A função é apenas 1(Achou) onde as entradas são exclusivas. Exclusivas no sentido de uma diferente da outra.

Exemplo 2:

Mãe: Compra sorvete, de chocolate ou(OR) morango.

Filho: Aqui estão os sorvetes de chocolate e morango.

Uma condição deveria excluir a outra, mas o filho, muito esperto, usou o ou(OR) inclusivo. Neste caso o pedido da mãe foi ambíguo. Um pedido não ambíguo seria: Compra sorvete, de chocolate XOR morango.

A Razão do Nome XOR

Dados os exemplos acima, encontrei na internet duas narrativas diferentes para o nome XOR, a primeira me parece mais lógica, mas se souberem de algo mais, me avise nos comentários:

  1. XOR, ou exclusive OR, é TRUE quando as entradas são exclusivas, ou seja, não iguais.
  2. XOR, ou exclusive OR, excluí uma das condições do OR, ela excluí a condição em que as duas entradas são verdadeiras.

De novo a explicação 1) acima me parece mais lógica, mas não há muita lógica quando se põe nome às coisas.

Como Chegar a 0xDEAD

Um teaser foi deixado em Dissecting a Minimum WebAssembly module: demonstrar como XORing 0xFF00 and 0x21AD resulta em 0xDEAD. A maneira mais simples de se chegar ao resultado é a de converter os números para binário e então aplicar a tabela bit por bit:


0xFF00 é 1111.1111.0000.0000
0x21AD é 0010.0001.1010.1101
XORing:  1101.1110.1010.1101 -> DEAD

XOR Também é um Adicionador, ou Metade dele

Veja novamente a tabela da função XOR, e compare com a tabela de adição de dois bits:

A B A+B
0 0 0
0 1 1
1 0 1
1 1 0 e vai 1 para o próximo bit (carry bit)

As tabelas XOR e adição são mesma tabela, o único problema é que o XOR é a metade de um adicionador, a condição A=1 e B=1 resulta em 0 e 1 vai para próximo bit (carry bit).

XOR Também Utilizado em Criptografia

Vamos voltar ao exemplo em que XORing 0xFF00 and 0x21AD resulta em 0xDEAD. Agora vamos dar alguns nomes criptográficos a estes números:

0xFF00 A mensagem original sem ser criptografada(M).

0x21AD A chave criptográfica, tanto o emissor e o receptor da mensagem conhecem esta chave(C).

0xDEAD A mensagem criptografada(E).

Alguém que intercepte a mensagem criptografada 0xDEAD não consegue ver a mensagem original 0xFF00 sem saber a chave criptográfica 0x21AD, mas o receptor da mensagem criptografada conseguira chegar na mensagem original aplicando a operação XOR na mensagem criptografada com a chave criptográfica:


0xDEAD é 1101.1110.1010.1101 -> Mensagem criptografada
0x21AD é 0010.0001.1010.1101 -> Chave criptográfica
XORing:  1111.1111.0000.0000 -> Mensagem original foi recuperada!

XOR possibilita a criptografia porque é possível recuperar a mensagem original da seguinte forma, seja:

M a mensagem original.

C a chave criptográfica.

E a mensagem encriptada.

Temos a mensagem encriptada executando:

E=XOR(M,C)

Podemos recuperar a mensagem original executando:

M=XOR(E,C)

Post MindMap


Leave a message below. Webassembly is evolving rapidly, please let me know if this post got outdated.

Enjoyed this post?

Don't miss new posts: Share it with your friends:

Você pode gostar...

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *