关于位运算的结论:
// 异或运算:1^1=0 0^0=0 1^0=1 0^1=1 相同位假,相反为真
// 位或运算:1|1=1,1|0=1,0|1=1,0|0=0,只要有1出现 结果位1
// 与或运算:0&0=0,0&1=0,1&0=0,1&1=1,只要有0出现 结果位0
https://codeforces.com/blog/entry/93321原题详解
https://codeforces.com/contest/1554/problem/C 题目链接
https://blog.csdn.net/weixin_42837024/article/details/98734787关于位运算详解
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
//看完标程发现 原问题等价 寻找 n^k>=m+1 寻找满足不等式的最小的k
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
cin>>t;
while(t–)
{
int n,m;cin>>n>>m;
m++;
int ans=0;//假如n比m大或者和m相等那么k=0满足题意且最小 因为0参与异或不改变原来值的大小
for(int k=30;k>=0&&n[HTML_REMOVED]>k&1)==(m>>k&1))continue;//如果在当前位相同说明不需要k使得n的值变大
if(m>>k&1)ans|=1<[HTML_REMOVED]>k&1)break;//假如找到了n的第k位比m大说明此时n已经必定大于m不再需要修改 结束循环
}
cout<<ans<<endl;
}
return 0;
}