Bitshifting将整数乘以10

Jac*_*ith 12 c++ bit-manipulation

简单的问题,但我似乎无法弄清楚:

如果我有一个整数,比如12,我对它执行以下位操作:

int i = 12;
i = (i << 3) + (i << 1);

我最终以120(12*10)结束.这是任何数字的情况.

有人可以简洁地向我解释为什么这有效吗?(当涉及到变速时,我显然遗漏了一些相当简陋的东西).

谢谢

Pup*_*ppy 21

表达为乘法.

i = (i << 3) + (i << 1);
i = (i * 8) + (i * 2);
i = 8i + 2i
i = 10i
Run Code Online (Sandbox Code Playgroud)

  • 它真的比乘以 10 更快吗? (2认同)

lez*_*lon 5

你基本上是这样做的:

i = i*2^3 + i*2
Run Code Online (Sandbox Code Playgroud)


Sir*_*tor 5

i << 3相当于i * 8. i << 1相当于i * 2.

分布属性告诉我们:

x = i * 10
x = i * (8 + 2)
x = 8i + 2i
Run Code Online (Sandbox Code Playgroud)