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.






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.
Não entendi..
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’);
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.
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.