位运算(&、|、^、~、>>、<<)

        位运算就是基于整数的二进制表示进行的运算。由于计算机内部就是以二进制来存储数据,位运算是相当快的。

        基本的位运算共 6 种,分别为按位与、按位或、按位异或、按位取反、左移和右移。

符号描述运算规则
&两个位都为1时,结果为1
|两个位都为0时,结果为0
^异或两个位相同为0,相异为1
~取反0变1,1变0
<<左移各二进位全部左移若干位,高位丢弃,低位补0
>>右移各二进位全部右移若干位,高位补0或符号位补齐

位运算可以进行高效运算,可以用在状态压缩DP

        

位运算常见的应用

        1.在二分算法中,mid=l+r>>1;比mid=(l+r)/2;要快。

        2.左移一位相当于乘以2,右移一位相当于余以2。(计算n*(2^m)可以用n<<m,计算n/(2^m)可以用n>>m)

        3.(n ^ (n >> 31)) - (n >> 31)可以用于取n的绝对值(n是int类型)

        4.可以判断两个非零数符号是否相同(x ^ y)>= 0

        5.可以获取一个二进制的某一位 (a >> b) & 1

        6.将一个数二进制的某一位设置为0

        int unsetBit(int a, int b) { return a & ~(1 << b); }

        7.将一个数二进制的某一位设置为1

         int setBit(int a, int b) { return a | (1 << b); }

        8.将一个数二进制的某一位取反

        int flapBit(int a, int b) { return a ^ (1 << b); }

        9.判断奇偶

        if ((a & 1) == 0)判断是否为偶数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值