nyoj--744--蚂蚁的难题(一)

蚂蚁的难题(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

小蚂蚁童鞋最近迷上了位运算,他感觉位运算非常神奇。不过他最近遇到了一个难题:

给定一个区间[a,b],在区间里寻找两个数x和y,使得x异或y最大。来,帮帮他吧!

输入
有多组测试数据(以EOF结尾)。
每组数据输入两个数a,b.(0<=a<b<2^63)
输出
输出a到b之间,异或最大的值。
样例输入
1 2
8 9
样例输出
3
1




#include <cstdio>
int main()
{
    long long a, b;
    while (~scanf("%lld %lld", &a, &b))
    {
        long long x = a ^ b;
        int c = 0;
        while (x)
        {
            c++;
            x >>= 1;
        }
        long long res = 1;
        for (int i = 0; i < c; i++)
        res *= 2;
        printf("%lld
", res - 1);
    }
    return 0;
}


原文地址:https://www.cnblogs.com/playboy307/p/5273791.html