仅使用加,减和移位,如何将整数乘以给定的数字?

例如,我想将一个整数乘以17。

我知道左移乘以2的倍数,右移除以2的幂,但是我不知道如何对此进行概括。

那负数呢?转换为二进制补码,并执行相同的过程?

(编辑:好吧,我明白了,没关系。您转换为二进制补码,然后根据数字从左向右而不是从右向左移动。)

现在,棘手的部分出现了。我们只能使用3个运算符。

例如,乘以60,我可以使用以下代码来完成:

(x << 5) + (x << 4) + (x << 3) + (x << 2)

其中x是我要乘的数字。但是,这就是7个运算符-我怎么可以将其压缩为仅使用3个?

最佳答案

据我所知,没有简单的方法可以仅使用3个运算符来进行乘法运算。

可以乘以60,因为60 = 64-4:(x << 6) - (x << 2)

关于c - 位移位乘以任何数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7286226/

10-11 22:10