这个函数是

f(x) = (a ⊕ x) − (b ⊕ x)

我们要让函数尽可能大,那么就是让(a ⊕ x)尽量大的同时(b ⊕ x)尽量小。
对于二进制下a和b的每一位,只有四种情况,相同时x大小无所谓,不同时,
a 0
b 1 时x对应位为1;
a 1
b 0 时x对应位为0;
使f(x)最大的x就确定了,带进去求一下就是答案。

#include<bits/stdc++.h>
using namespace std;
long long vis[101],cnt;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    long long a,b,c=1,ans=0;
    cin>>a>>b;
    long long x=a,y=b;
    while(a || b)
    {
        long long ax=a&1,bx=b&1;

        if(ax==0 && bx==1) vis[++cnt]=1;
        else vis[++cnt]=0;
        //cout<<ax<<' '<<bx<<' '<<vis[cnt]<<endl;
        a>>=1;
        b>>=1;
    }
    for(int i=cnt;i;--i)
    {
        ans=(ans<<1)+vis[i];
        //cout<<vis[i];
    }
    cout<<(x^ans)-(y^ans);
    return 0;
}
/**************************************************************
    Problem: 4564
    User: contest21_42
    Language: C++
    Result: 正确
    Time:2 ms
    Memory:2180 kb
****************************************************************/