/*
@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;
}
用位運算來處理集合中的交,並,補(對稱差)運算
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.