A little girl loves problems on bitwise operations very much. Here's one of them.
You are given two integers l and r. Let's consider the values of for all pairs of integers a and b (l ≤ a ≤ b ≤ r). Your task is to find the maximum value among all considered ones.
Expression means applying bitwise excluding or operation to integers x and y. The given operation exists in all modern programming languages, for example, in languages C++ and Java it is represented as "^", in Pascal — as «xor».
The single line contains space-separated integers l and r (1 ≤ l ≤ r ≤ 1018).
Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.
In a single line print a single integer — the maximum value of for all pairs of integers a, b (l ≤ a ≤ b ≤ r).
1 2
3
8 16
31
1 1
0
题目链接:http://codeforces.com/problemset/problem/276/D
题目大意:求区间内两个数异或的最大值
题目分析:异或所能达到的最大值显然是全1的时候,区间端点异或一下,找出小于等于它的最大的2的幂数,减1即可
#include <iostream>
#define ll long long
using namespace std;
int main()
{
ll a, b, c, ans = 1;
cin >> a >> b;
c = a ^ b;
while(ans <= c)
ans <<= 1;
cout << ans - 1 << endl;
}