如何最大化二进制表达式的值?

How to maximize the value of binary expression?

我们如何简化 (a&b)*(c&b)? 其中“&”是按位的,* 代表乘积。

或者在 [L,R] 中找到 b 使得 (a&b)*(c&b) 最大?

假设未签名。查看 a & mask 如果它在 a 和掩码中都设置,则会设置一个位。掩码中的零永远不会使结果变大,但如果设置了 a 中的相应位,则可能会使结果变小。

所以:

(a&b)*(c&b) 永远不会大于 a*c,这是在设置 b 中的所有位时实现的。

如果 b 应该尽可能小,您可以清除所有不会递减 ac 的位,即在其中任何一个中设置的位:

b = a | c