Utilizzando solo l'aggiunta, la sottrazione e il cambio di bit, come posso moltiplicare un numero intero con un numero dato?Bitshift per moltiplicare con qualsiasi numero
Ad esempio, voglio moltiplicare un numero intero da 17.
So che lo spostamento a sinistra è moltiplicando per un multiplo di 2 e spostando a destra è la divisione per una potenza di 2, ma non so come generalizzare questo.
E i numeri negativi? Converti in complemento a due e fai la stessa procedura?
(EDIT: OK, ho ottenuto questo, non importa si converte in complemento a due e poi si fa a spostare in base al numero da sinistra a destra invece che da destra a sinistra..)
Ora arriva la parte difficile. Possiamo usare solo 3 operatori.
Per esempio, moltiplicando per 60 posso fare usando questo:
(x << 5) + (x << 4) + (x << 3) + (x << 2)
Dove x
è il numero che sto moltiplicando. Ma sono 7 operatori - come posso condensare per usare solo 3?
In moltiplicazioni generali non può essere fatto in 3 operazioni di turni, aggiungere/sottrae ... Ma sia 17 e 60 può essere fatto in 3 operazioni . (suggerimento: prova una sottrazione per 60) EDIT: non ho visto che questo ha già avuto risposta. – Mysticial
hanno fatto i problemi in modo che il lavoro comodamente in haha 3 operatori. Grazie per tutto l'aiuto. – Adam