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

Previous  Top  Next

    
 

 

 

Code:

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;

 

 

 

©Drkb::00074

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php

 


Code:

var

X1, X2: Byte;

begin

X1 := X2 xor X2; 

X2 := X1 xor X2; // X2 = X1

X1 := X1 xor X2; // X1 = X2

 

 

Автор ___ALex___

http://forum.pascal.dax.ru

©Drkb::00075