using ll = long long;
using namespace std;
ll MAXX = 1e18;
void solve()
{
ll a, b, r; cin >> a >> b >> r;
if (a == b) { cout << 0 << endl; return; }
//a>b
if (a < b) swap(a, b);
int bit = 60;
//找到a和b不同的那一位
while ((a & (1ll << bit)) == (b & (1ll << bit))) bit--;
ll ans = MAXX;
ll r1 = 0;
for (int i = bit - 1; i >= 0; i--){
if ((b & (1ll << i)) < (a & (1ll << i)))
{
//不让它超过r
if (r1 + (1ll << i) <= r) r1 += (1ll << i);
}
}
ans = min(ans, llabs((a ^ r1) - (b ^ r1)));
cout << ans << endl;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
int t; cin >> t;
while (t--) solve();
}
思路就是按位比较,核心思路是这一行(b & (1ll << i)) < (a & (1ll << i)),a>b,如果某一位a是1而b是0,那就让r1的这一位也是1,这样可以让a的这一位变成0,而b的这一位变成1,进而最后的差会变小,bit取60是因为2^60>10^18