Etikettarkiv: swapping

Swapping variables

Swappa variabler är ju något som kan vara användbart i flera sammanhang. Det klassiska exemplet brukar ges med att man har ett värde i A och ett värde i B (som kan vara likadant men inte nödvändigtvis) och sedan gör man följande operationer:

C = A
B = A
A = C

Detta sätt kräver dock extra datalagring i form av variabeln C och kan eventuellt undvikas med diverse trick. Det man bör tänka på är dock att vissa av tricken inte är helt rumsrena och har problem i vissa fall, antingen när någon av A eller B är noll eller om A = B.

Variant med addition/subtraktion:

A = A + B
B = A – B
A = A – B

Man kan vara uppmärksam på vad som händer när talen A eller B närmar sig MAX_INT det största talet som kan hanteras. När A eller B är > MAX_INT/2 kommer man få en överflödniong vid additionen och ett lån vid subtraktionen. På de flesta system fungerar detta men inte nödvändigtvis alla, det finns säkert system som är trasiga i den aspekten.

Farlig variant med XOR:

A = A ⊕ B
B = B ⊕ A
A = A ⊕ B

Men, det här blir inte så bra om A = B och det bör man i så fall försäkra sig aldrig händer.  Sker det förstörs innehållet i båda registren. Därför bör man villkora att man inte utför operationen om båda registren innehåller samma värde. Det innebär dock fler operationer.

Muahaha

World domination in 12 easy steps.