如何最大化二进制表达式的值?
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
应该尽可能小,您可以清除所有不会递减 a
或 c
的位,即在其中任何一个中设置的位:
b = a | c
我们如何简化 (a&b)*(c&b)
?
其中“&
”是按位的,*
代表乘积。
或者在 [L,R] 中找到 b 使得 (a&b)*(c&b)
最大?
假设未签名。查看 a & mask
如果它在 a
和掩码中都设置,则会设置一个位。掩码中的零永远不会使结果变大,但如果设置了 a 中的相应位,则可能会使结果变小。
所以:
(a&b)*(c&b)
永远不会大于 a*c
,这是在设置 b
中的所有位时实现的。
如果 b
应该尽可能小,您可以清除所有不会递减 a
或 c
的位,即在其中任何一个中设置的位:
b = a | c