异或运算符 只能用于整形 浮点和字符型都不行
作用:把整形转化为二进制相同取0相反取1
13二进制为:1101
11二进制为:1011
13^11的二进制为:0110 结果为:6
一.用来交换
public class Main {
public static void main(String[] args) {
int a = 20;
int b = 30;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
二.条件很苛刻只有只有一个个数为基数的才行要不然求出的是个数为基数的值的异或
1.用来求得一个数组里个数为奇数的数
public class Main {
public static void main(String[] args) {
int array[] = {2,3,3,4,4,5,5,6,6,7,7,8,8,9,9};
int a = array[0];
for (int i = 1; i < array.length; i++) {
a ^= array[i];
}
System.out.println("个数为基数的为:" + a);
}
}
异或有类似交换律的概念可以这么理解:a=b^c^c^d^d^e^e^e^e因为c,d,e都为偶数so用交换律先运算结果就剩b了
2.判断两个数组里面不同的数值:
public class Main {
public static void main(String[] args) {
int arr[]={1,2,3,4,5,6,7,8,9,10};
int brr[]={1,2,3,4,5,6,7,8,9,10,3};
int a=arr[0];
int b=brr[0];
for (int i = 1; i < arr.length; i++) {
a^=arr[i];
}
for (int i = 1; i < brr.length; i++) {
b^=brr[i];
}
int c=a^b;
System.out.println(c);
}
}
a^b=arr和brr里面所以值的异或