2010-09-23 8 views

Répondre

3
a=a+b; 
b=a-b; 
a=a-b; 
+0

Bien sûr, c'est - voir la réponse de gspr. – Hogan

+0

@Hogan s'est rendu compte que très rapidement et a changé de réponse, désolé pour la confusion. – fredley

+0

ne fonctionne pas pour toutes les valeurs –

2

La mise en œuvre précise dépend bien sûr du langage de programmation que vous utilisez, mais vérifiez sur XOR swap.

Un exemple en C pourrait être

#include <stdio.h> 

/* Swaps the content pointed to by a and b. The memory pointed to is 
    assumed non-overlapping! */ 

void swap(int* a, int* b) 
{ 
    *a = (*a)^(*b); 
    *b = (*a)^(*b); 
    *a = (*a)^(*b); 
} 

int main(int argc, char** argv) 
{ 
    int a = 4; 
    int b = 7; 
    printf("a=%d, b=%d\n", a, b); 
    swap(&a, &b); 
    printf("a=%d, b=%d\n", a, b); 
    return 0; 
} 

Important: Prasoon Saurav a commenté sur la question elle-même, this answer à une autre question est plus juste que la mienne, car il est important que les deux variables résident à des endroits sans chevauchement dans la mémoire. Mon exemple ne vérifie pas cela.

0

Bien sûr: a,b = b,a fonctionne dans divers langages de programmation. Dans d'autres, vous pouvez utiliser le code xor trick.

1

a = a + b; // a = 11, b = 7

b = a-b; // a = 11, b4

a = a-b; // a = 7, b = 4

ou

a = a * b;

b = a/b;

a = b/a;

mais attention avec cette méthode, un débordement ou un sous-dépassement est possible pour certaines combinaisons.

+2

Tout risque de débordement/underflow avec certaines combinaisons de chiffres. – dty