Java异或是Java二进制的一种运算规则。两个相同的操作位相同则为0,不同则为1。
特性:
1、任意两个相同的数异或的值为0,任何数与0的异或至为原值。x ^ x = 0,0 ^ x = x。
2、多个数异或运算时,最终都将所有值的操作位做一遍是否相同的比较,所以可以得到:x^(y^z) = (x^y)^z。
示例:
1、给定两个字符串 s 和 t,它们只包含小写字母。字符串t由字符串s随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。(来自LeetCode)
public char xor(String s, String t){
char a =0;
for(int i = 0 ; i < s.length() ; i++){
a^=s.charAt(i);
}
for(int i = 0 ; i < t.length() ; i++){
a^=t.charAt(i);
}
return a;
}
2、给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。(来自LeetCode)
/**
所有出现两次元素在异或后结果为0,0与出现一次的数据异或后,值不变
*/
public int singleNumber(int[] nums) {
int result = nums[0];
for(int i = 1; i<nums.length; i++ ){
result ^= nums[i];
}
return result;
}