ci sono un paio di ragioni per questo ..
In primo luogo, la moltiplicazione e la divisione è in realtà più veloce in alcune circostanze quando usiamo spostamento a sinistra, spostamento a destra ...
cioè il numero 1 in binario è 00000001 spostarlo a sinistra per diventare 00000010 ed è ora 2 .. cioè 1 x 2
Maiusc due volte per moltiplicare/divisione da 4, 3 volte per 8, 4 volte per 16, ecc ...
Non viene utilizzato troppo frequentemente, ma in casi come una porta del motore fisico da C/C++, l'elaborazione di grandi quantità di dati, o alcuni dei Motori 3d, vedremo i cambiamenti come un residuo del codice originale, o semplicemente per la velocità.
(Si potrebbe vedere anche su alcuni java mobili J2ME, ad esempio, dove le unità in virgola mobile non sono disponibili, ovvero spostare un valore di 10 bit in modo che i restanti 10 bit agiscano come una sorta di punto decimale .. quindi spostare indietro per il valore reale quando si disegna nella posizione dello schermo, al costo della dimensione complessiva possibile)
L'altro uso come menzionato è per un rapido Math.floor(); - ma con una differenza di chiave. Ho fatto alcuni benchmark di qualche mese prima di lavorare con Box2D e l'ho trovato centinaia di volte più veloce - strano dal momento che presumo che entrambe le conversioni siano gestite in modo nativo.
Quando arrotondamento numeri negativi,
Math.floor (-7,6) = -8 e (-7.6 < < 0) = -7
I.e. < < 0 su un numero (float) si arrotonda nella direzione di 0.
Suppongo che alcuni indovinino come codificare, semplicemente martellando ciò che funziona :( – leppie
se si mostrano alcune delle linee intorno avremo più da indovinare. – grapefrukt