不用临时变量交换两个数

Posted on 2008-07-20 12:40  白兴科技  阅读(358)  评论(0编辑  收藏  举报

procedure TForm1.Button1Click(Sender: TObject);
var
  a,b:integer;
begin
  a:=strtoint(self.Edit1.text);
  b:=strtoint(self.Edit2.Text);
  a:=a xor b;
  b:=b xor a;
  a:=a xor b;
  self.Edit1.Text:=inttostr(a);
  self.Edit2.Text:=inttostr(b);
end;

 

前两个赋值语句:“a = a ^ b;”和“b = b ^ a;”相当于b = b ^ (a ^ b),而b ^ a ^ b等于a ^ b ^ b。b ^ b的结果为0,因为同一个数与相向相^,结果必为0。因此b的值等于a ^ 0,即a,其值为2。

再执行第三个赋值语句:“a = a ^ b”。由于a的值等于(a ^ b),b的值等于(b ^ a ^ b),因此,相当于a = a ^ b ^ b ^ a ^ b,即a的值等于a ^ a ^ b ^ b ^ b,等于b。

Copyright © 2024 白兴科技
Powered by .NET 9.0 on Kubernetes