蚂蚁的难题(一)
时间限制: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 
-  
 
 
- 有多组测试数据(以EOF结尾)。
思路:异或的算法是相异为1,先将十进制数化为二进制,补齐后比较,得出的二进制数就是结果00000011,(3)2=00000011
m-1=m*2-1=3.
 
#include<stdio.h>
int main()
{long long a,b,n,m;//long long 在vc6.0是不通过的while(~scanf("%lld%lld",&a,&b))
{
n=a^b;
m=1;
while(n)
{
m*=2;
n/=2;
}
printf("%lld\n",m-1);
}
return 0;
} 或 a|b    有1则1,