Ho trovato questa domanda,Finding quadrata di un numero
scrivere una funzione che restituisce un quadrato di dato intero n senza utilizzare la moltiplicazione.
soluzione a questo è
public static int sq(int n){
int i = n;
int sq = 0;
int count = 0;
while(i > 0){
if((i & 1) == 1){
sq += n << count;
}
i = i >> 1;
count++;
}
return sq;
}
Capisco quello che sta facendo la funzione, ma non capisco perché questo sta funzionando.
Qualcuno può spiegare perché si tratta di una soluzione funzionante?
È solo un'implementazione semplice (e inefficiente) della moltiplicazione binaria: con quale parte stai riscontrando difficoltà? Ripensa a come hai imparato a fare moltiplicazione "a mano lunga" nella scuola elementare. –
Si noti inoltre che il codice è buggato - non riesce per n <0. –