传送门
题意:
思路:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int a[1000];
int res[110];
int main()
{
ll x,s;
int cnt = 0;
cin>>x>>s;
ll xx=x,ss=s;
while(x)
{
a[++cnt] = x%2;
x=x>>1;
}
int num = 0;
while(s)
{
res[++num] = s%2;
s=s>>1;
}
ll ans = 0;
ll sum = 0;
int flag = 0;
for(int i = 1; i <= cnt; i++)
{
if(a[i])
{
if(res[i])
{
ans++;
}
else
{
cout<<0<<endl;
return 0;
}
}
else
{
if(res[i])flag = 1;
}
}
for(int i = 1; i <= num; i++)
if(!a[i] &&res[i])
{
flag = 1;
break;
}
ll p = (ll)pow(2,ans);
if(a[1]&&res[1] && !flag)sum = 1;
if(xx==ss)cout<<p-1<<endl;
else
cout<<p-sum<<endl;
}