在家庭作业中,其中一个问题要求我们将任意整数乘以一个常数,只使用+, - 和<<操作员和最多三个操作。例如,第一个常数是17,我解决了
(x << 4) + x
然而,给出的一些常数是负的(例如-7)。乘以7是一件相对微不足道的事情(我将其作为(x << 3) - x
),但我无法弄清楚如何仅使用三个允许的运算符来翻转符号。
我试图通过在每个结果中添加或减去2147483648来翻转该位(这意味着这将强制使用最重要的位,从而翻转符号),但是在我的C#测试实现中,这有证明不成功。
是否有一些正数可以乘以给定的int,它在功能上类似于-7?是否会添加2147483648以C#以外的语言工作?我忽略了什么吗?
本书的原始问题如下:
假设我们被赋予生成代码的任务,以通过各种不同的常数因子K乘以整数变量x。为了有效,我们只想使用操作+, - 和&lt;&lt;。对于以下K值,编写C表达式以使用每个表达式最多三次运算来执行乘法。
一个。 K = 17
B中。 K = -7
℃。 K = 60
d。 K = -112
答案 0 :(得分:3)
您无需更改标志。您将7 * x
写为(相当于)8*x - x
。现在,你需要做些什么才能获得-7 * x
?
答案 1 :(得分:0)
x - (x << 3)
无效吗?