c中的位移乘法不使用2的幂

2 c bit-manipulation bit bitwise-operators

如何使用位移执行乘法36?是不是只能乘以2的幂?例如:

unsigned x = 4; // binary 00000000 00000000 00000000 00001000
unsigned y = x << 3; // multiply by 8, resulting in binary 00000000 ... 00100000
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mit*_*eat 6

你不能单独通过位移乘以2的非幂.

但你可以使用加法和乘法来分解它:

x * 36 = x * (32 + 4)
       = (x * 32) + (x * 4)
Run Code Online (Sandbox Code Playgroud)

由于324是的功率2(2^52^2分别地),可以执行那些作为单独的移位和添加的结果.