XOR

Ontem me deparei com o operador XOR novamente. Nunca tinha usado e não entendia a função dele claramente. Agora sei. Isso aqui:

Label1.Visible := Label1.Visible xor True;

É a mesma coisa que isso:

Label1.Visible := not Label1.Visible;

Neste caso acima, não justifica complicar usando xor, mas talvez em outras situações ele seja mais útil. Eu nunca precisei dele, além do que, acho que o código fica mais difícil de ler.

5 Respostas para “XOR”


  1. 1 Rod

    Você pode usá-lo para aplicar máscaras em imagens ou pode usá-lo em criptografia. A xor B = C, B xor C = A.

    Rod.

  2. 2 Erick Sasse

    Não entendi.. :)

  3. 3 Leonel Togniolli

    Usei algumas vezes. Geralmente quando tenho duas entradas obrigatórias mas exclusivas. Algo assim:

    if (Nome ”) xor (Email ”) then
    ShowMessage(’É necessário informar o nome ou o email, mas não os dois’);

  4. 4 Rod

    Exemplo:
    function StringXor(const s:string;const b:byte):string;
    var
    i:integer;
    begin
    Result:=”;
    for i:=1 to length(s) do begin
    Result:=Result+char(ord(s[i]) xor b);
    end;
    end;

    chave:=10;
    s1:=StringXor(’Erick’,chave); //resulta Oxcia
    s2:=StringXor(s1,chave); //resulta Erick

    Rod.

  5. 5 Junior/RO

    Usando XOR, simplifiquei para uma única linha alguns testes no BeforePost de um programa de contabilidade que precisei dar manutenção.

    A tabela tinha o campo DEBITO e o campo CREDITO. No lançamento, um e somente um dos campos deveria estar preenchido.

    Antes era

    if (LancamentosDEBITO.Value = 0) and (LancamentosCREDITO.Value = 0)) then Erro();

    if (LancamentosDEBITO.Value 0) and (LancamentosCREDITO.Value 0)) then Erro();

    Foi simplificado para:

    if not ((LancamentosDEBITO.Value = 0) xor (LancamentosCREDITO.Value = 0)) then Erro();

    Vou escrever um artiguinho sobre isso e postar no news.

Deixe um comentário