位运算&&二进制枚举(未完待续……)
程序员文章站
2024-01-26 08:24:10
...
一、基本位运算
A&B
同为1才是1。
通常用于二进制位操作,如一个数&1的结果就是取二进制的最末尾,可以用来判断整数奇偶。
A|B
有一个是1才是1。
通常用于二进制定位上的无条件赋值,例如一个数or1的结果就是把二进制最末位强行变成1,若要变成0则减1就可以了,实际意义就是把这个数强行变成最接近的偶数。
A^B
两数不同才是1。
通常用于对二进制的特定一位进行取反,可以对两个数进行交换。
常用性质:A^B^B=A,即B^B=0,可以用作判断一个数出现的次数。
~运算
把二进制所有数取反。
取反,注意的是整数类型有没有符号,如果是无符号整数,那么得到的值为其与上界的差。
位运算简单应用
二、简单的二进制枚举
核心思想:利用二进制的1,和0代表选择与不选择。将所有情况罗列开,并一位以为与各种情况进行对比,例如:
for(i=0;i<(1<<n);i++)//n是指集合中的元素的个数,(1<<n)==2^n指的是总共的情况数目
{
for(j=0;j<n;j++)//j代表的是每种元素对应的下角标
{
if(i&(1<<j)==1)//代表选择
{
}
else(i&(1<<j)==0)//代表不选择;
}
if( )//加入题目所给出的条件;
{
}
}
典型例题:
NEFU 1172 Find different NEFU 1205 和为K--二进制枚举 NEFU 1505 陈老师加油-二进制枚举
NEFU 1518 纸牌游戏-二进制-搜索 NEFU 1285 趣味解题 NEFU 1641 权利指数