Multiplier deux variables en utilisant l’opération de décalage binary

J’ai deux variables (qui sont en fait des éléments de deux masortingces différentes). Par exemple, je veux multiplier

a[i][k]*b[k][j] 

en utilisant la manipulation des bits, comment puis-je faire cela.

J’ai vu des références à des constantes de multiplication, pas des variables comme 3 * 2, 3 * 4, 3 * 8, etc. Mais comment appliquer les mêmes techniques à la multiplication de variables? Si un message sur ce sujet existe, pouvez-vous me le dire? Merci!

La multiplication par décalage de bits est utilisable uniquement en multipliant par une puissance de 2 (2, 4, 8, 16, etc.). La multiplication sera alors réduite à une opération de changement de bit unique:

  x1 = 2^n; result = x2 << n; // This is the same as x2 * x1 

Pour les cas arbitraires, le moyen le plus efficace est d'utiliser une multiplication normale:

 a[i][k]*b[k][j] 

Étant donné deux variables intégrales

 unsigned X, Y; 

Et étant donné un Commodore 64, Apple] [, ou une autre architecture qui ne possède pas sa propre instruction de multiplication, cela multipliera les nombres.

 unsigned answer = 0; while ( X ) { answer <<= 1; if ( X & 1 ) answer += Y; X >>= 1; } 

Si vous multipliez des masortingces énormes, ce qui compte, c’est un algorithme efficace qui a un bon comportement en cache. Pour C ++, consultez la bibliothèque Eigen . Sur un processeur moderne, vous ne pouvez pas micro-optimiser la multiplication de deux variables.