Java中的按位操作符有四个,分别是:&(按位与)、|(按位或)、^(按位异或)、~(按位非)。
1、先来看按位与(&)
从结果可以清晰的看到,与的规则为:两位相与,若有一位为0,则结果为0,否则为1。
2、然后是按位或(|)
public class Main {
这样就得到了按位或的结果
3、接下来是按位异或
不同得1,相同得0
按位异或有一个有意思的用法,它可以不用第三方变量,交换两数的值,如下
这个是有依据的,这样来看,
第一步:temp1^=temp2,即temp1=temp1^temp2
第二步:temp2=temp2^temp1=temp2^(temp1^temp2),异或满足交换律,去括号后最后得到temp2=temp1
第三步:temp1=temp1^temp2=(temp1^temp2)^temp2=temp1^temp2^temp1=temp2
经过这三步,顺利交换了两变量的值。
这个方法告诉我们,可以在C++中这样实现swap函数
这里使用了传引用,当然你也可以用传指针的方式实现
4、最后是按位非(~)
应用:
1、1001个数中,只有一个是重复的,找出这个重复的数。
2、一堆数中,只有两个数出现了一次,其他都出现了两次,找出这两个数。
3、两个数中,一个数出现奇数次, 个出现偶数次,找出出现奇数次的数。
http://blog.csdn.net/alading2009/article/details/40450421
http://www.cnblogs.com/JhSonD/p/6374397.html