Quindi sì, è un po 'difficile e necessita di schizzi su carta. Una volta ottenuta l'idea, è semplice. Inizierò con spiegazioni in inglese quindi semplice esempio. La cosa più importante è liberare la tua mente dal fatto che siamo bizzarramente due numeri e pensiamo ai numeri in mezzo.
In primo luogo, Diciamo alcune regole: 1) Se due numeri sono uguali, nessun numero sarà tra di loro. 2) Se due numeri non sono uguali, il numero consecutivo tra loro conterrà ZERO ad ogni cifra, quindi il loro AND bit a bit sarà ZERO.
Prima di entrare nell'esempio, dovremmo spiegare il semplice algoritmo sopra riportato.
1) Ogni divisione con due mezzi rimuove una cifra binaria dalla destra dei numeri. (Questo è come divisione in due modi in binario). 2) Ogni volta che dividiamo, raddoppiamo la variabile del passo. Semplice, la variabile passo è più simile a un contatore che detiene il valore più alto nella parte superiore prima che i due numeri diventino uguali.
Supponiamo di avere il seguente esempio:
L: 11.110.001 R: 11110011
S = 1 (00000001 in binario)
Applicando l'algoritmo su questi valori:
Poiché L e R non sono ancora uguali, tagliare una singola cifra binaria da ciascuna (dividere ciascuna per 2) e moltiplicare S per 2; Nel primo turno diventano
L: 1111000 R: 1111001
S = 2 (00000010 in binario)
Poiché non sono uguali e, di nuovo, e il risultato è:
L: 111100 R: 111100
Ora sono uguali, le interruzioni di loop e il risultato
012.351.641.061.
è il numero di sinistra (o il diritto poiché sono uguali) * valore S.
Quando eseguiamo il multiplo in binario, aggiungiamo uno zero a destra. Qui abbiamo bisogno di 3 zeri poiché S è 00000010
11110000 che è come previsto.
Conclusione: continuare a tagliare dividendo fino a quando entrambi sono uguali e nulla è tra di loro.Mentre fate che l'aggiornamento mastio che passo si è in :)