您的位置:首页 > 其它

用位运算来处理集合中的交,并,补(对称差)运算

2013-12-21 12:18 225 查看


/*
@author : liuwen
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <climits> //INT_MAX INT_MIN LONG_LONG_MAX LONG_LONG_MIN
#include <cstdlib>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
int  decimal1 = 36,decimal2=5;
cout<<"第一个数(10进制):"<<decimal1<<endl;
cout<<"第二个数(10进制):"<<decimal2<<endl;
char binary1[255],binary2[255],binary3[255];
itoa(decimal1,binary1,2);
itoa(decimal2,binary2,2);

cout<<"各种集合之间的操作:"<<endl;

//交集
cout<<"第一:交集 (A&B) "<<endl;
cout<<"    A = "<<binary1<<endl;
cout<<"    B = "<<binary2<<endl;
itoa(decimal1&decimal2,binary3,2);
cout<<"    A&B == "<<binary3<<"(2)"<<endl;
cout<<"    A&B == "<<(decimal1&decimal2)<<"(10)"<<endl<<endl;

//并集
cout<<"第二:并集 (A|B) "<<endl;
cout<<"    A = "<<binary1<<endl;
cout<<"    B = "<<binary2<<endl;
itoa(decimal1|decimal2,binary3,2);
cout<<"    A|B == "<<binary3<<"(2)"<<endl;
cout<<"    A|B == "<<(decimal1|decimal2)<<"(10)"<<endl<<endl;

//对称差集
cout<<"第三:对称差集 (A^B) "<<endl;
cout<<"    A = "<<binary1<<endl;
cout<<"    B = "<<binary2<<endl;
itoa(decimal1^decimal2,binary3,2);
cout<<"    A|B == "<<binary3<<"(2)"<<endl;
cout<<"    A|B == "<<(decimal1^decimal2)<<"(10)"<<endl<<endl;

//补集
cout<<"对称差集下面特殊的集合情况----->全集的补集:"<<endl;
decimal1 = (1<<10)-1; //2^10-1,   全集为10个1
decimal2 = 37;       //子集 100101
itoa(decimal1,binary1,2);
itoa(decimal2,binary2,2);
cout<<"    全集U = "<<binary1<<"(2)"<<"-----"<<decimal1<<"(10)"<<endl;
cout<<"    子集S =     "<<binary2<<"(2)"<<"-----"<<decimal2<<"(10)"<<endl;
itoa(decimal1^decimal2,binary3,2);
cout<<"    补集C = "<<binary3<<"(2)"<<"-----"<<(decimal1^decimal2)<<"(10)"<<endl<<endl;
//可以发现,补集相当于U-S
cout<<"可以发现,补集相当于U-S="<<decimal1<<" - "<<decimal2<<" = "<<decimal1-decimal2<<"(10)"<<endl;
cout<<"但是速度却没有用位运^快"<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: