& (与)
只有对应位的值都是 1 时结果才为 1, 否则即为 0
| (或)
对应位中有一个为1则为1
^ (异或)
当对应位的值不同时,则为1, 否则为0
取反~
二进制的0变成1,1变成0
移位运算符
左移运算<<:左移之后,右边位补0。(无论正负数,右侧填一个零,相当于乘以2)
右移运算>>:右移之后,左边位补原最左位值(可能是0,可能是1)(相当于除以2)
右移运算>>>:右移之后,左边位补0。
(1)若是正数,则和>>一样,相当于除以2
(2)若是负数,则负数会变成整数,会从一个负数变成一个相对较大的正数;
应用场景
判断奇偶性
方式一:n%2==1表示n是一个奇数
方式二:n&1==1表示n是一个奇数
举例:9&1 = 00001001 & 00000001 == 00000001,是一个奇数
核心:判断二进制的最后一位是否为1
交换两个数
方式一:
int team = a;
a = b;
b = team;
方式二:使用位运算可以不需要借助额外空间完成数值交换
a=a^b;//a=a^b
b=a^b;//b=(a^b)^b=a^0=a
a=a^b;//a=(a^b)^(a^b^b)=0^b=0
其他方式:可以参考很多算法题平台中的经典算法