算法模版:位运算【沈七】

前言

在算法竞赛中我们常用 位运算来简化一些操作,下面我们介绍一下 位运算的常用操作。

&

按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

|

按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1

^

按位异或
若参加运算的两个二进制位值相同则为0,否则为1

~

取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1

<<

左移
用来将一个数的各二进制位全部左移N位,右补0
如果用来 运算的话 右移一位 相当于 * 2 
例:3<<1 = 6 

>>

右移
将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0
如果用来 运算的话 右移一位 相当于 / 2 
例:6>>1= 3 

应用

1.判断奇偶

只需要判断二进制位末尾数字
如果是 1 的话,代表是奇数,如果是 0 则代表是偶数,

if(n & 1 == 1){
    // n 是个奇数。}

2.交换两个数

x = x ^ y // (1)
y = x ^ y // (2)
x = x ^ y // (3)

3.求n的第k位数字:

n >> k & 1

4.返回n的最后一位1:

lowbit(n) = n & -n

猜你喜欢

转载自blog.csdn.net/m0_66139206/article/details/123780346
今日推荐