神奇的位运算

  1. 运算优先级
    在这里插入图片描述
  2. 判断第i位是不是1
举个栗子
从 1~3这 n3个整数中随机选取任意多个,
输出所有可能的选择方案(升序排列)。
所有答案为
state 输出
001  代表输出1
010  代表输出2
011  代表输出1 2
100  代表输出3
101  代表输出1 3
110  代表输出 2 3
111  代表输出 1 2 3

那么问题来了?怎么判断什么时候该输出呢,
大家看上面的输出就会发现规律,当个位为1时输出1,个位为0时不输出,十位为1时输出2,十位为0 时不输出,百位为1时输出3,百位不为1时不输出
也就是要判断某一位(i位)是不是1

state >> i & 1即可
  1. 写dfs时经常遇到状态从0变成1,也就是选中和没选中
走下一步时step + 1代表走下一步,state就代表状态,类似flag = 0,flag =1
dfs (step + 1, state );//不选这个数
dfs (step + 1, state | 1 << step);//选中这个数,置为1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值