Bitshift à multiplier par un nombre quelconque

En utilisant uniquement l'addition, la soustraction, et bitshifting, comment puis-je multiplier un nombre entier par un nombre donné?

Par exemple, je veux multiplier un nombre entier par 17.

Je sais que le passage de gauche est en multipliant par un multiple de 2 et de déplacement de droite est la division par une puissance de 2, mais je ne sais pas comment faire pour généraliser cela.


Que sur des nombres négatifs? Convertir en complément à deux et de faire la même procédure?

(EDIT: OK, j'ai eu ce, tant pis. Vous convertir en complément à deux et puis ne vous déplaçant selon le nombre de gauche à droite au lieu de droite à gauche.)


Maintenant la partie la plus délicate est en. Nous ne pouvons utiliser 3 opérateurs.

Par exemple, en multipliant par 60 je peux accomplir en utilisant ce:

(x << 5) + (x << 4) + (x << 3) + (x << 2)

x est le numéro je suis multipliant. Mais c'est 7 opérateurs - comment puis-je condenser ce n'utilisent que 3?

  • En général, les multiplications ne peut pas être fait en 3 opérations de quarts de travail, ajouter/soustrait... Mais les deux 17 et 60 peut être fait en 3 opérations. (astuce: essayez une soustraction pour 60) EDIT: je ne vois pas cela a déjà été répondu.
  • ils ont fait les problèmes de sorte des idéalement travail dans les 3 opérateurs haha. merci pour toute l'aide.
InformationsquelleAutor Adam | 2011-09-02