使用位移操作将两个变量相乘

Jus*_*rey 0 c c++ unix bit-manipulation

我有两个变量(实际上是两个不同矩阵的元素).例如,我想成倍增加

a[i][k]*b[k][j]  
Run Code Online (Sandbox Code Playgroud)

使用位操作,我该怎么做.

我看到了对乘法常数的引用,而不是像3*2,3*4,3*8等变量.但是我如何将相同的技术应用于乘法变量呢?如果有关于此的帖子,你能指出我吗?谢谢!

Dre*_*ann 6

给出两个积分变量

unsigned X, Y;
Run Code Online (Sandbox Code Playgroud)

鉴于Commodore 64,Apple] [或其他一些没有自己的乘法指令的架构,这将使数字倍增.

unsigned answer = 0;
while ( X )
{
  answer <<= 1;
  if ( X & 1 )
    answer += Y;
  X >>= 1;
}
Run Code Online (Sandbox Code Playgroud)

  • @JustinCarrey我也是.:) (3认同)