位运算-相或为K

147 阅读1分钟

相或为k

INT_MAX=2^31-1=2147483647 2^16=25536 2^10=1024

#include <iostream>
using namespace std;
//k为0,x是0或1都可,k为1,x必须是1 
bool check(int x,int k){
	for(int i=31;i>=0;i--){
		//k的第i位为0,且x的第i位为1 
		if((!((k>>i)&1))&&((x>>i)&1)){
			return false;
		}
	}
	return true;
}
int main() {
	int t;
	cin>>t;
	while(t--){
		int n,k;
		cin>>n>>k;
		int ans=0;
		for(int i=0;i<n;i++){
			int x;
			cin>>x;
			if(check(x,k)){
				//将ans和x进行位运算 
				ans|=x;
			}
		}
		if(ans==k) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}	
    return 0;
}