hinzufügen Ich wurde diese Frage zu dem Interview gestellt. Ich habe nicht geantwortet und eigentlich verstehe ich nicht, wie es funktioniert.Wie man Zahlen ohne +
int add(int x, int y)
{
while (y != 0)
{
int carry = x & y;
x = x^y;
y = carry << 1;
}
return x;
}
Ich frage nicht, warum es eine richtige Antwort produziert ... Zunächst einmal, warum stoppt der Algorithmus schließlich? Für mich ist das nicht so offensichtlich.
Damit es anhalten kann, muss carry
0
werden. Kann das nicht auf den Punkt gebracht werden?
Es ist ein [Volladdierer] (https://en.wikipedia.org/wiki/Adder_%28electronics%29#Full_adder). Nachdem Sie 32 Mal nach links geschoben haben, gibt es 32 Null-Bits (was "0" ist). –
@ElliottFrisch Nun ... ja)). Aber es wird nicht erklärt, warum es funktioniert. – Alupkers
@Alupkers Sie fragte, warum Algorithmus stoppt? Genau wie @ElliottFrisch sagte: 'curry << 1 'setzt das am weitesten rechts liegende Bit auf 0. In höchstens 32 Schritten (ganze Zahlen sind 32 Bit breit in Java) sind alle Bits 0, also' y == 0 'und die Schleife endet . – Nikem