这题真的体现了自己思维的不足,考虑问题只是考虑他的特殊性,却不能总结出它的一般性规律。
对于这题, 如果L == R , 那么结果为0.
否则, 我们只需要找到最高的某一位 (二进制数中的某一位, 设为第p位, 从0开始编号),
使得要找的两个数从最高位到最低位, 在第p位第一次出现不同,如 11110000 和 11101111, 这里 p = 4.
这样,结果就是 (2^p) ^ (2^p -1)
附上代码:
l, r = map(long, raw_input().split())
if l == r:
print 0
else:
p = 0
for i in xrange(61):
if ((1 << i) & r > 0) and ((1 << i) & l) == 0:
p = i
print (1 << p) ^ ((1 << p) - 1)