0
点赞
收藏
分享

微信扫一扫

几种常见的位运算在算法中的应用

进击的包籽 2022-04-24 阅读 75

记录一些算法题中常用的位运算

n&1

与运算,两个位都为1时,结果才为1,n&1 判断二进制n最右一位是否为1 可用于判断奇偶数

if((n&1)==1){
	//最后一位为1
	//n为奇数             
}
if((n&1)==0){
	//最后一位为0
	//n为偶数         
}

n>>1 与 n<<1

n>>1 右移操作=》各二进制位全部右移一位 丢弃二进制n最右一位,高位补0 相当于n/2
n<<1 左移操作=》各二进制位全部左移一位 丢弃二进制n最左一位 相当于n*2

int n = 2;
n >> 1; ---> 1
n << 1; ---> 4

a^b

异或运算:相同为0 相异为1
可用于翻转指定位与交换两个数

  • 翻转指定位(任何数与 0 异或都会保持不变
X=1010 1110 //翻转后四位
Y=0000 1111 //令Y的低4位为1,其余位为0
X^Y=1010 0001 //为翻转后的结果
  • 不需要借助临时变量 交换两个数
    a = a ^ b;
    b = a ^ b; // b=(a^b)^b=a^(b^b)=a
    a = a ^ b; // a=(a^b)^a=a^a^b=b

应用

    1. 二进制间距

题目:
在这里插入图片描述
思路:遍历n二进制的每一位,记录上一位,找最大距离
代码:

class Solution {
public:
    int binaryGap(int n) {
        int last = -1,res=0,cur=0;
        while(n!=0){
            if((n&1)==1){
                if(last!=-1)
                    res = max(res,cur-last);
                    last = cur;
            }
            n>>=1;
            cur++;
        }
        return res;

    }
};
举报

相关推荐

0 条评论