【发布时间】:2017-01-07 08:08:58
【问题描述】:
我试图找到满足这个不等式的最大1 << n(所有变量都是正整数):
a & ~((1 << n) - 1) >= b
迭代地解决这个问题是微不足道的(是的,我知道你可以通过分而治之等获得更好的性能),但这不是我的问题。
我想知道是否有一种方法可以直接解决这个问题,比如通过某种比特旋转?
注意 1: 假设您可以在一次操作中“向上/向下舍入到最接近的 2 次幂”。
注意2:如有必要,您可以假设二进制补码表示(但我怀疑这会有所帮助)。
如果有直接的方法,我可以使用什么技术来解决这个问题?如果没有,我能告诉你吗?
我已经尝试了很多东西,比如 XORing a 和 b,将结果四舍五入到 2 的下一个幂等,但我最终没有找到任何好的东西。
【问题讨论】:
-
'所有变量都是正整数'你的意思是所有变量都是
unsigned的类型吗? -
@Marian:当然,为什么不...如果不是,您可以将它们转换为已签名或未签名,这不是真正的问题。
-
这不等于找到
a & ~b的前导位吗? -
不是。例如,对于 a == b,n 是 a 中尾随零的数量,但 a & ~b 始终为 0。
-
@user2357112:好点,但我实际上并不太担心那些边缘情况,因为它只是一个检查操作(
a == b ? blah : blah)......虽然如果它会很好总是有效。
标签: c binary bit-manipulation boolean-logic maximize