题意:题目给出x,s,要求有多少个 y 满足 x | y = s
思路:按位运算的解法,模拟y的每一位1取0或1是否可行,如果取0和1都可以,即答案 × 2,只可取0或1,答案总数不变,当出现 0 和 1 都不可取时,输出答案 = 0。
- 注意:当给出的 x = s 时,总答案数要减1,y是正整数,所以答案要减去 y = 0的情况
(x | 0 == x) - 代码中有一处需注意,当 aa = 0 && bb = 0 时候,p = 1错误,return false;
if(!aa && !bb)
if(p == 1) return false;
accode:
#include <bits/stdc++.h>
#define ios std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
typedef long long ll;
ll x, s, ans = 1;
bool check(int k, int p)
{
int aa = (x>>k) & 1;
int bb = (s>>k) & 1;
//cout<<aa<<" "<<bb<<endl;
if(aa && !bb) return false;
if(!aa && bb)
{
if(p == 0) return false;
}
if(!aa && !bb)
{
if(p == 1) return false;
}
return true;
}
int main()
{
ios
cin>>x>>s;
bool f1, f2;
for(int i = 0; i <= 31; i++)
{
f1 = check(i, 0);
f2 = check(i, 1);
if(f1 && f2) ans *= 2;
if(!f1 && !f2) return puts("0"), 0;
}
if(x == s) ans--;
cout<<ans<<endl;
return 0;
}