0

在一项家庭作业中,其中一个问题要求我们将任意整数乘以一个常数,仅使用 +、- 和 << 运算符以及最多三个操作。例如,第一个常数是 17,我将其求解为

(x << 4) + x

但是,给出的一些常数是负数(例如 -7)。乘以 7 是一件相对微不足道的事情(我将其设为(x << 3) - x),但我无法弄清楚如何仅使用三个允许的运算符来翻转标志。

我试图通过在每个结果中添加或减去 2147483648 来翻转该位(认为这将强制使用最高有效位,从而翻转符号),但在我的 C# 测试实现中,这已被证明是不成功的。

是否有一些正数可以乘以在功能上类似于-7的给定int?添加 2147483648 可以在 C# 以外的语言中使用吗?我忽略了什么吗?

书中的原始问题如下:

假设我们的任务是生成代码以将整数变量 x 乘以各种不同的常数因子 K。为了提高效率,我们只想使用操作 +、- 和 <<。对于以下 K 值,编写 C 表达式以执行乘法运算,每个表达式最多使用三个操作。

A.K = 17

B. K = -7

C.K = 60

D.K = -112

4

2 回答 2

2

您无需更改标志。你写7 * x为 (equivalent to) 8*x - x。现在,您需要做什么才能获得-7 * x

于 2012-09-11T20:33:04.550 回答
1

x - (x << 3)无效的吗?

于 2012-09-11T21:47:40.663 回答