Pensez à la façon dont vous multipliez en décimal en utilisant un crayon et du papier :
12
x 26
----
72
24
----
312
A quoi ressemble une multiplication en binaire ?
0111
x 0101
-------
0111
0000
0111
-------
100011
Vous avez remarqué quelque chose ? Contrairement à la multiplication en décimal, où vous devez mémoriser la "table des temps", lorsque vous multipliez en binaire, vous multipliez toujours l'un des termes par 0 ou 1 avant de l'écrire dans la liste des additifs. Il n'y a pas besoin de table de multiplication. Si le chiffre du deuxième terme est 1, vous ajoutez le premier terme. S'il est égal à 0, vous ne le faites pas. Notez également comment les additions sont progressivement déplacées vers la gauche.
Si vous n'en êtes pas sûr, faites quelques multiplications binaires sur papier. Lorsque vous avez terminé, convertissez le résultat en décimal et voyez s'il est correct. Après en avoir fait quelques-unes, je pense que vous aurez une idée de la façon dont la multiplication binaire peut être mise en œuvre en utilisant des décalages et des additions.
8 votes
C'est (8*x)-x ou 7x.
2 votes
Notez que la plupart des compilateurs optimisent déjà ce genre de choses. Par exemple, transformer 15*x en ((x<<4)-x))
2 votes
Algèbre :) - (x << 3) - x = 8 * x - x = (8 - 1) * x = 7 * x L'astuce est que x << 3 == x * 2^3 == 8
2 votes
Il suffit d'utiliser le
*
opérateur ; c'est à cela qu'il sert. Il s'agit presque d'un duplicata de cette question . Notez que(x<<3) - x
peut déborder pour certaines valeurs dex
où le plus simple et le plus clairx * 7
ne le fera pas.0 votes
Related Java uniquement dupliquer ici.