Delphi - база знаний

       

Быстрый способ обмена значений в 2х переменных.


Быстрый способ обмена значений в 2х переменных.





procedure SwapVars1(var u, v; Size: Integer); 
var 
  x: Pointer; 
begin 
  GetMem(x, Size); 
  try 


    System.move(u, x^, Size); 
    System.move(v, u, Size); 
    System.move(x^, v, Size); 
  finally 
    FreeMem(x); 
  end
end


procedure SwapVars2(var Source, Dest; Size: Integer); 
  // By Mike Heydon, mheydon@eoh.co.za 
begin 
  asm 
     push edi 
     push esi 
     mov esi,Source 
     mov edi,Dest 
     mov ecx,Size 
     cld 
 @1: 
     mov al,[edi] 
     xchg [esi],al 
     inc si 
     stosb 
     loop @1 
     pop esi 
     pop edi 
  end
end

procedure TForm1.Button2Click(Sender: TObject); 
begin 
  SwapVars1(X1, X2, SizeOf(Integer)); 
end

Взято с сайта


var 
 X1, X2: Byte; 
begin 
 X1 := X2 xor X2;  
 X2 := X1 xor X2; // X2 = X1 
 X1 := X1 xor X2; // X1 = X2 

Автор ___ALex___





Содержание раздела