non, tes valeurs binaires sont fausses.
 
Dans l'exemple que tu donnes, ça donne ça :  
| 
iteration 0
 carry : 1  000001
 a     : 25  011001
 b     : 37  100101
 a apr : 60  111100
 b apr : 2  000010
 iteration 1
 carry : 0  000000
 a     : 60  111100
 b     : 2  000010
 a apr : 62  111110
 b apr : 0  000000
 La somme de 25 et 37 est 62
 | 
le carry = a & b , c est pour détecter les retenues 1 + 1 en binaire ca fait une retenue, alors que 0 + 0, 0 +1 et 1 + 0 non. Le 0 + 0 , on se fiche du resultat , et le 1 + 0 Et 0 +1 , ca donne 1. Donc carry contient la position des retenues
le a = a ^b, ca fait la somme seulement sur les bits sans retenue. Donc ici :
  a^b = 25 ^37 = 011001 ^ 100101 , ca fait qu'on ajoute 011001 ^ 100101 mais pas 011001 ^ 100101. Par contre , la retenue a été détectée et est stockée dans carry .
Ensuite b prend la valeur de toutes les retenues décalée de 1, ici, il n'y en a qu'une, le 000001 qui se transforme en 000010 , car 000001 + 000001 ca fait 000010
 
Ensuite, on refait un tour de boucle et on recommence, est ce que ca génère des retenues, etc... jusqu'à ce que b vaille 0.
 
 
Voilà un autre exemple avec des nombres plus grands :  
 
| iteration 0
carry : 524  00000000001000001100
 a     : 524  00000000001000001100
 b     : 77647  00010010111101001111
 a apr : 77123  00010010110101000011
 b apr : 1048  00000000010000011000
 iteration 1
 carry : 1024  00000000010000000000
 a     : 77123  00010010110101000011
 b     : 1048  00000000010000011000
 a apr : 76123  00010010100101011011
 b apr : 2048  00000000100000000000
 iteration 2
 carry : 2048  00000000100000000000
 a     : 76123  00010010100101011011
 b     : 2048  00000000100000000000
 a apr : 74075  00010010000101011011
 b apr : 4096  00000001000000000000
 iteration 3
 carry : 0  00000000000000000000
 a     : 74075  00010010000101011011
 b     : 4096  00000001000000000000
 a apr : 78171  00010011000101011011
 b apr : 0  00000000000000000000
 La somme de 524 et 77647 est 78171
 |