Pourquoi ce code pour plus(à l'aide d'opération au niveau du bit) fonctionne en java

public int add(int a, int b){  
        while (b != 0){
            int carry = (a & b) ;

            a = a ^ b; 

            b = carry << 1;
        }
        return a;
 }

C'est le code pour calculer la somme de deux nombres entiers à l'aide opération au niveau du bit.

Si je fais le calcul manuellement ou par programmation, je vois qu'il fonctionne pour tout entier.
Mais je ne suis pas en mesure de comprendre la relation entre la valeur intermédiaire de l' a et carry.
et pourquoi est multiplié par 2 pour attribuer à b?

PS: j'ai trouvé la réponse ici
Au niveau du bit de Multiplier et de les Ajouter en Java
mais c'est pour la multiplication et pas pour l'addition.

Avez-vous des connaissances sur la bit-wise plus?
Le porter de un chiffre est ajouté à la chiffres, bien sûr. Cet algorithme ne fait "plus comme vous le savez de l'école", mais de mélanger un peu au lieu de soin digit par digit - il fait une addition sans porte en premier (xor), puis ajoute la carie séparément (encore une fois de la même manière) jusqu'à ce qu'il n'y a pas plus de porte (donc il ajoute le porte-généré par l'ajout de-porte, puis la porte généré par le plus et ainsi de suite). Ce doit résilier car ne porte que des aller "à gauche" - si au moins un bit est "fixe" après chaque itération.
oui, j'ai, qu'est-ce que votre point de toute façon?
merci beaucoup..en fait j'ai été trouver qu'il est difficile de croire comment réaliser au cours des prochaines bits fonctionne en binaire car il n'est pas le cas, bit par bit de départ..
je voulais vous expliquer comment cela fonctionne et je voulais savoir sur quel niveau vous êtes. Donc, il aurait été plus facile pour moi d'expliquer (et de ne pas écrire des trucs que vous connaissez déjà).

OriginalL'auteur Sunny | 2013-06-27