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