Olá, Pessoal
O que realmente isso faz?int a = 20;
int b = 5;
int c = a ^ b;
System.out.println(c);
Olá, Pessoal
O que realmente isso faz?int a = 20;
int b = 5;
int c = a ^ b;
System.out.println(c);
Bom dia peresjuliao,
Então esse é o operdador lógico OR Exclusivo, veja o exemplo:
int a = 20;
int b = 5;
if (a == 20 ^ b == 5) {
System.out.println("True");
} else {
System.out.println("False");
}
Esse operador funciona da seguinte maneira:
Então no seu caso ele estava somando porque da forma que foi colocado não era um valor booleano e realmente uma conta.
No exemplo acima a primeira condição é verdadeira, mesmo assim ele verifica a segunda condição que também é verdadeira.
Espero ter ajudado! 
Como o colega acima explicou, ele faz o ou exclusivo. E faz isso bit a bit.
No seu caso:a: 10100 (valor binário de 20) ^
b: 00101 (valor binário de 5)
-----------
R: 10001
Resposta: 17
O operador de ou exclusivo se A for verdadeiro e B for falso, ou se A for falso e B for verdadeiro.
Falso nos demais casos.
R: 10001 ^
b: 00101
----------
a: 10100
Por isso ele é tão usado em criptografia.