计算机中的位运算和集合

目录

一、位运算基础运算符

1、<< 左移,>>右移运算符

2、& 与,| 或,^ 异或,~ 非(取反)

二、位运算与集合的相关联系

3、a&b   ,求交集

4、a|b ,求并集

5、a ^ b ,求对称差,即两个集合并集里除去交集的子集 

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中删除)>

13、s&(s-1) ,删除集合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} 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值