二進制下可方便進行集合的表示與運算
二進制數的每一位代表了此處的開關狀態,以此來表示集合中元素的有無。
一些特殊集合的表示:全集 2^n-1, 空集 0 。
若要插入第 n 號元素,只需向代表集合的二進制數加上 2^n 即可。
只需將二進制數按位與 1<<n。結果若為 1,即有元素;為 0,即無元素。
遍歷集合中的各元素只需每位按位與。
利用位運算可方便快速的進行集合運算。
A | B | A&B | A|B | A^B | |
---|---|---|---|---|---|
二進制 | 10110 | 01100 | 00100 | 11110 | 11010 |
集合 | {1, 2, 4} | {2, 3} | {2} | {1, 2, 3, 4} | {1, 3, 4} |
操作 | 取交集 | 取並集 | 對稱差 |
#include <cstdio>
const int n=5;
void output(int set){
for (int i=0; i<5; i++)
if (set & (1<<i)) printf("%d ", i+1);
}
int main(void){
int A=22, B=12;//A{2, 3, 5} B{3, 4}
printf("集合A: ");
output(A);
printf("\n集合B: ");
output(B);
printf("\nA&B: ");
output(A&B);
printf("\nA|B: ");
output(A|B);
printf("\nA^B: ");
output(A^B);
printf("\nA的補集: ");
output(((1<<5)-1)^A);
printf("\n");
return 0;
}
輸出結果:
集合A: 2 3 5
集合B: 3 4
A&B: 3
A|B: 2 3 4 5
A^B: 2 4 5
A的補集: 1 4
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。