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