从给定范围中查找具有最大零(二进制代表)的数字

时间:2016-02-22 22:46:14

标签: algorithm binary

给定范围(低,高)数字,如何找到其二进制表示中具有最多零的数字(在该范围内)?例如,给定范围5到15,答案是8

1 个答案:

答案 0 :(得分:2)

假设0 < Min < Max

mask = 1 << intlog2(Min ^ Max)
answer = (Min + (mask-1)) & (-mask)

intlog2(x)是数字x

的二进制rep中设置的最高位的位置

示例:

Min = 5, Max = 15
mask = 1 << intlog2(5 ^ 15) = 1 << intlog2(10) = 1 << 3 = 8
answer = (5 + (8-1)) & (-8) = 12 & (-8) = 8