Warum dieser code für addition(bitweise operation) funktioniert in java

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

            a = a ^ b; 

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

Dies ist der code zur Berechnung der Summe zweier ganzer zahlen bitweise operation.

Wenn ich die Berechnung manuell/programmgesteuert, ich sehe, es funktioniert für jede ganze Zahl.
Aber ich bin nicht in der Lage, um herauszufinden, jede Art von Beziehung zwischen Zwischenwert von a und carry.
und warum tragen ist, multipliziert mit 2 zuweisen b?

PS: ich fand die Antworten hier
Bitweise Multiplizieren und Addieren in Java
aber das ist für die Multiplikation und nicht für neben.

  • Haben Sie irgendwelche Kenntnisse über die bitweise addition?
  • Die tragen eine Ziffer Hinzugefügt, um die nächste Stelle, natürlich. Dieser Algorithmus nur führt "- Zusatz, wie man Sie kennt aus der Schule", sondern ein bisschen Durcheinander, anstatt sorgfältig durch, Ziffer für Ziffer - es ist zudem ohne trägt erste (xor), dann fügt der Karies separat (wieder in der gleichen Weise), bis es nicht mehr trägt (so er fügt hinzu, die trägt-generated-by-adding-trägt, dann trägt generiert, die neben und so weiter). Diese beenden müssen, da führt nur gehen "nach Links" - also mindestens ein bit wird auf "fixed" nach jeder iteration.
  • ja, habe ich, was ist dein Punkt trotzdem?
  • vielen Dank..eigentlich war ich es hart finden, zu glauben, wie Sie tragen über nächste bit arbeitet Binär, wie es ist, nicht geschieht bit für bit aus starten..
  • ich wollte erklären, wie es funktioniert und wollte wissen, auf welcher Ebene Sie sind. So wäre es einfacher gewesen, mir zu erklären (und nicht schreiben, Sachen, die Sie bereits kennen).
  • ok, ich war nur zu finden es verwirrend, wie carry-Betrieb wird durchgeführt, indem mit Schleife..

InformationsquelleAutor Sunny | 2013-06-27
Schreibe einen Kommentar