欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

位运算&&二进制枚举(未完待续……)

程序员文章站 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 权利指数

NEFU 1665 四糸乃买花-二进制枚举

 

相关标签: 算法基础