位运算位运算。。。
AC代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
typedef long long ll;
int main(){
ll x,s;
while(~scanf("%lld%lld",&x,&s)){
ll ans = 0;
if(!(x&~s)){ //如果x的二进制中含有s的二进制没有的位,那么肯定or上一个数等于s,则直接输出
ll t = x;
int count = 0;
while(t){
if(t&1) count++;
t = t>> 1;
}
ans = 1ll << count; //x中的1可以任意取,那么就有2^n中可能
//把0的情况去掉
if((x|0) == s) --ans;
}
printf("%lld",ans);
}
system("pause");
return 0;
}