如何理解异或-记住异就够了
如何理解异或
什么是异或,就是是否不同
与 & 两个都为真结果为真
或 | 两个有一个为真结果为真
非 !真的结果为假,假的结果为真
异或 ^ 两个逻辑值不同结果为真,两个逻辑值相同结果为假,不要记异或,就记住异
package com.example.exam.array;
public class Test136 {
public static void main(String[] args) {
// 与
System.out.println(true & true);
// 或
System.out.println(true | true);
// 非
System.out.println(!true);
// 异或
System.out.println(true ^ false);
System.out.println(true ^ true);
}
}
异或的性质
N^0=N
任何数与0异或结果为自己本身N^N=0
任何数和自己异或结果为0- 异或满足交换律和结合律
A^B=B^A
A异或B等于B异或AA^B^C=A^(B^C)
A异或B异或C等于A异或B异或C的结果 - 一批数做异或,异或顺序不重要
因此有以下结论
条件:a和b指向两块不同的内存,尽量别用以下方法
两个数a和b交换,可以使用如下代码实现
a=a^b;
b=a^b;
a=a^b;
证明:
初始值:a=甲, b=乙
a=a^b =甲^乙, b=乙
b=a^b =甲乙乙=甲, a=甲^乙
a=a^b =甲乙甲=乙, b=甲
位运算
位运算是比算数运算快的多的运算!
取出一个数最右侧的一个1
a&(~a+1) a与(a取反+1)
例子
a 1010001010
~a 0101110101
~a+1 0101110110
a&(~a+1) 0000000010