目录
6、a&~b (a&(~b)),求 a中减去ab交集后的子集
7、a&b==a 或 a|b ==b ,表示 a 包含于b,即b 包含a
8、1<<a 表示集合 元素 a
9、1<<n -1 即 ((1<<n)-1) ,表示集合{0,1,2,... n-1}
10、s>>a&1==? ,即(s>>a)&1==? ,?==1,表示元素a 在集合中,?==0,则不在集合中
11、s|(1<<a) ,将元素a 添加到集合s中)>
12、s&~(1<<a) 即 s&(~(1<<a)),将元素a 从集合s中删除)>
一、位运算基础运算符
1、<< 左移,>>右移运算符
左移1位,表示乘2,右移1位,表示除二
eg:1<<3 表示1左移三位,即1*2*2*2=8
2、& 与,| 或,^ 异或,~ 非(取反)
& :与运算 a 和 b 都是1,则结果为1,否则结果为0;
I : 或运算,a 和b 任意一个为1,则结果为1,否则结果为0;
^:异或运算,a 和b 相同则结果为0,不同则结果为 1;
~:非,取反运算,eg:1001,取反就是0110
二、位运算与集合的相关联系
3、a&b ,求交集
eg:
a 表示集合{0,2,3},用二进制表示,1101, 即第0位,2位,3位是1,集合外的位置用0表示
b表示集合{0,1,2},用二进制表示,0111,即第0位,1位,2位是1,集合外的位置用0表示
a&b : 即1101&0111=0101,则因为第0和2位值是1,所以 交集是 0,2
4、a|b ,求并集
eg:
a 表示集合{0,2,3},用二进制表示,1101, 即第0位,2位,3位是1,集合外的位置用0表示
b表示集合{0,1,2},用二进制表示,0111,即第0位,1位,2位是1,集合外的位置用0表示
a|b : 即1101 | 0111=1111,则因为全部位是1,所以 并集是 0,1,2,3
5、a ^ b ,求对称差,即两个集合并集里除去交集的子集
eg:
a 表示集合{0,2,3},用二进制表示,1101, 即第0位,2位,3位是1,集合外的位置用0表示
b表示集合{0,1,2},用二进制表示,0111,即第0位,1位,2位是1,集合外的位置用0表示
a^b : 即1101^0111=1010,则因为第1和3位值是1,所以 交集在并集里的补集是 1,3
注意:异或运算里,结果为0的数不表示交集,交集用&求
6、a&~b (a&(~b)),求 a中减去ab交集后的子集
eg:
a 表示集合{0,2,3},用二进制表示,1101, 即第0位,2位,3位是1,集合外的位置用0表示
b表示集合{0,1,2},用二进制表示,0111,即第0位,1位,2位是1,集合外的位置用0表示
a&~b : 即1101&(~0111)=1101&1000=1000,则因为第3位值是1,所以a 中减去ab交集后的子集是3
注:如果b 是a的子集,则求a&~b 等同于 a^b
7、a&b==a 或 a|b ==b ,表示 a 包含于b,即b 包含a
eg:
a 表示集合{0,2},用二进制表示,0101, 即第0位,2位是1,集合外的位置用0表示
b表示集合{0,2,3},用二进制表示,1101,即第0位,2位,3位是1,集合外的位置用0表示
a&b : 即0101&1101=0101 =a
a|b : 即0101 | 1101=1101 =b
三、位运算和集合或集合元素的相关联系
8、1<<a 表示集合 元素 a
eg:
1<<2 得到的结果是100 ,第2位是1,则表示集合{2} ,更多单指集合元素2
9、1<<n -1 即 ((1<<n)-1) ,表示集合{0,1,2,... n-1}
eg:
1<<4-1 ,即(1<<4)-1 = (10000)-1 =01111 ,第0,1,2,3 位是1,所以表示集合{0,1,2,3}
10、s>>a&1==? ,即(s>>a)&1==? ,?==1,表示元素a 在集合中,?==0,则不在集合中
eg :
s ={0,1,2,4} 表示为10111,a =2,b=3;
s>>a&1 =( 10111>>2)&1 = 00101&1=1&1=1, 表示a 在 集合 s 中;
s>>b&1=(10111>>3)&1=00010&1=0&1=0,表示b 不在集合s中;
11、s|(1<<a) ,将元素a 添加到集合s中
eg:
s ={0,1,2,4} 表示为10111,a=3;
s|(1<<a) =10111 | (1<<3)=10111 |(1000)=11111, 因为第0,1,2,3,4都是1,所以集合S变为{0,1,2,3,4}
12、s&~(1<<a) 即 s&(~(1<<a)),将元素a 从集合s中删除
eg:
s ={0,1,2,4} 表示为10111,a=2;
s&~(1<<a)=s&(~(1<<a))=10111 &(~(1<<2))=10111 &(~(100))=10111&(011)=10011
注:
如果转换成int 表示,100 =4,取反,~100 转换成int 是-5 ;如果求得是-4,则 表示为~4+1 ;即 -5+1=-4,二进制表示为~100+1=011+1=100
如果删除元素a一定在集合S内,则也可以用 s^(1<<a),同样可以删除
13、s&(s-1) ,删除集合s中最小的元素
eg:
s=10111,则集合内元素为 {0,1,2,4},
s&(s-1)=10111&10110=10110 ,由于第1,2,4位为1,则表示集合{1,2,4}