好的,所以我要做的就是将有符号整数乘以 2 并返回值。如果值溢出,则通过返回 Tmin 或 Tmax 来使其饱和。挑战在于仅使用这些逻辑运算符(!~ & ^ | + << >>)而不使用(if 语句、循环等),并且最多只允许 20 个逻辑运算符。
现在我解决这个问题的思考过程是首先找到极限。所以我将 Tmin/max 除以 2 以获得边界。这是我所拥有的:
积极的
这个和更高的作品:
1100000...
这个和更低的不会:
1011111...
如果它不起作用,我需要返回这个:
100000...
消极的
这和更低的作品:
0011111...
这个和更高的不会:
0100000...
如果它不起作用,我需要返回这个:
011111...
否则我必须返回:
2 * x;
(顺便说一下,整数是 32 位的)
我看到前两位对于确定问题是否应该返回 2*x 或限制很重要。例如,异或会做,因为如果第一个到位相同,则应返回 2*x,否则应返回限制。然后需要另一个 if 语句来处理整数的符号,因为它是负数 Tmin 需要返回,否则 Tmax 需要返回。
现在我的问题是,如何在不使用 if 语句的情况下做到这一点?xD 或者一个更好的问题是我计划这个工作的方式,甚至在限制条件下可行?或者更好的问题是是否有更简单的方法来解决这个问题,如果有,如何解决?任何帮助将不胜感激!