Mi è stata fatta questa domanda nell'intervista. Non ho risposto e in realtà non capisco come funziona.Come aggiungere numeri senza +
int add(int x, int y)
{
while (y != 0)
{
int carry = x & y;
x = x^y;
y = carry << 1;
}
return x;
}
Non sto chiedendo perché lo fa produrre una risposta corretta ... Prima di tutto, perché l'algoritmo alla fine si fermano? Per me non è così ovvio.
Per interromperlo, carry
deve diventare 0
. Nessuno può spiegarlo in poche parole?
È un [full adder] (https://en.wikipedia.org/wiki/Adder_%28electronics%29#Full_adder). Dopo lo spostamento a sinistra di 32 volte, ci saranno 32 bit zero (che è '0'). –
@ElliottFrisch Beh ... sì)). Ma non è spiegato perché funzioni. – Alupkers
@Alupkers Hai chiesto perché l'algoritmo si arresta? Esattamente come @ElliottFrisch ha detto: 'curry << 1' imposta il bit più a destra su 0. In massimo 32 passi (gli interi sono a 32 bit in Java) tutti i bit sono 0 quindi' y == 0' e il ciclo termina . – Nikem