相同为0,不同为1。
java
1 ^ 1=0
0 ^ 0=0
1 ^ 0=1
0 ^ 1=1
性质:
- 0 ^ N = N N ^ N = 0
- 交换、结合
a ^ b = b ^ a;
(a ^ b) ^ c = a ^ (b ^ c);
因此异或全部的元素的结果就是那个只出现1次的元素。
实现两个值的交换,而不必使用临时变量(值可以相等,但前提是他两指向的内存是两块东西)。
例如交换两个整数a = 甲;b = 乙;的值,可通过下列语句实现:
java
a = 甲;
b = 乙;
a = a^b; || a = 甲 ^ 乙
b = a^b; || b = (甲 ^ 乙) ^ 乙 = 甲
a = a^b; || a = (甲 ^ 乙) ^ 甲 = 乙
例题:
有一个数组
1、其中有一种数,出现了奇数次,其他的出现了偶数次;
解法:直接异或所有数。
2、其中有两种数,出现了奇数次,其他的出现了偶数次。
插入排序
对数器