2009. május 9., szombat
Swapping two variables without pointers or a third one
Problem/Question/Abstract:
How to swap two integers without a temporary variable or pointers?
Answer:
Solve 1:
Yes, it�s possible to swap the values of two variables without using a third one or swapping pointers.
How??? The answer is: using xor!!!
Place a label and a button on a form, and put this on Button�s click event.
procedure TForm1.Button1Click(Sender: TObject);
var
var1: integer;
var2: integer;
begin
var1 := 19;
var2 := 564;
var1 := var1 xor var2;
var2 := var1 xor var2;
var1 := var1 xor var2;
// They�re swapped!!!
Label1.Caption := 'Var1 = ' + IntToStr(var1) + '; Var2 = ' + IntToStr(var2);
end;
Solve 2:
// ========================================
// This is a FAST swap routine that swaps
// the contents of any 2 variables.
// The variables may be of any type but
// the sizeof the VARS must be passed in Len
//
// eg. X1,X2 : integer;
//
// SwapMem(X1,X2,SizeOf(Integer));
//
// ======================================== }
procedure SwapMem(var Source, Dest; Len: integer);
begin
asm
push edi
push esi
mov esi,Source
mov edi,Dest
mov ecx,Len
cld
@1:
mov al,[edi]
xchg [esi],al
inc si
stosb
loop @1
pop esi
pop edi
end;
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése