Comment puis-je utiliser le décalage de bits à remplacer division entière?

Je comprends comment le faire pour des puissances de 2, ce qui n'est pas ma question.

Par exemple, si je veux trouver de 5% d'un nombre à l'aide d'un décalage de bits au lieu d'une division d'entier, comment pourrais-je le calculer?

Ainsi, au lieu de (x * 20 /19), j'ai pu faire (x * 100 >> 11). Maintenant, ce n'est pas un droit, mais il est proche et je suis arrivé à l'aide de l'essai et de l'erreur. Comment puis-je déterminer le plus précis possible maj pour utiliser?

Pourquoi? Est-ce censé être une optimisation? De quoi êtes-vous optimiser? Êtes-vous sûr qu'il a besoin d'être optimisé?
Ce qui fait de vous ce que c'est possible?
Jonathan a raison: Si vous voulez l'utiliser comme une optimisation, vous devrait plutôt laisser le compilateur faire le travail pour vous, puisque les compilateurs sont mieux que la plupart des humains de faire de telles choses. Toutefois, si vous voulez juste pour savoir, je ne pense pas qu'il y est un petit guide sur comment convertir entre division et de déplacement.
tout ce qui est, c'est pas de l'optimisation... 🙂
Non, x * 100 >> 11 est x * 100 / 2048 est x * .048828125 qui est une approximation raisonnable de 5%. x * 102 >> 11 est mieux que brainjam souligné, mais x * 51 >> 10 est tout aussi bon et moins susceptibles de déborder, alors que x * 205 >> 12 a un nombre bien moindre erreur.

OriginalL'auteur glutz78 | 2010-10-03