Xor ^

ae pessoal que duvida eu fiquei com esse metodo pq o ultimo println eh true e o primeiro eh false :?

class FimOper{
	public static void main(String [] aad){
		System.out.println((2<3)^(4>3));
		System.out.println((2<3)^(4<3));
	}
}

Fala Camilo, blz?

Cara, o operador lógico XOR retorna verdadeiro apenas se os dois operandos forem diferentes (true/false ou false/true). Se os operandos forem iguais (true/true ou false/false) o retorno dele é false.

Tabela verdade do XOR

1 2 Res
F F False
T F True
F T True
T T False

Sacou?

pq o xor da true se for operadores opostos…

(2<3)^(4>3) é igual a “true ^ true”, que se aplicar o xor da false.

(2<3)^(4<3) é igual a “true ^ false”, que com xor fica true

ahh saquei a kathy nao explicou assim ela eh louca… falou que se um operando for true ele retorna true… mais ele so vai retornar caso seja 1 true/false ou false/true, mais se tiver duas verdades ou duas falsidades ele retorna false confere?

agora eu ja vi a seguinte sintaxe em simulados é valido:

System.out.println((10>5)XOR(10==11));

ou ^ representa o XOR?

:smiley:

Isso.

Agora para continuar estudando vc podia trocar o operador > para >> e entender o que acontence :slight_smile:


		System.out.println((2<<3)^(4>>3));
		System.out.println((2<<3)^(4<<3));
	

vc me matou ai, dar 16 e 48 agora pq… acho q a kathy nao abordou isso ai espero q ela venha abordar hehe!! mais ricardo em questao da minha outra pergunta la usar o XOR eh um erro de compilacao ne? devo usar o ^ que representa o XOR…

isso, o certo é ^

e pq aquele codigo gerou la 16 e 48?

para te explicar vai demorar um pouco…

da uma pesquisada no google sobre deslocamento de bits e manda suas duvidas aqui…, se nao conseguir resolver te ajudo blz?

tranquilo vou dar uma pesquisada acho que o deitel fala sobre vou funçar ele :smiley:

muito bom o post…

outro ex:

public static void testarXOR(){ //if (11 >= 10 ^ 2 <= 22){// true e true => false //if (11 <= 10 ^ 2 >= 22){ //false e false => false //if (11 <= 10 ^ 2 >= 1){ //false e true => true if (11 >= 10 ^ 2 <= 1){ //true e false => true System.out.println("Sim"); } else { System.out.println("Não"); } }

alguém pode me dizer a diferença de eu usar ^ ou || ???

^ e || são duas coisas completamente diferentes.
a ^ b :

  • Avalia sempre as duas expressões a e b.
  • Faça a tabela verdade, e veja que para a = true e b = true, o resultado (true ^ true == false) é diferente de a || b.
    a || b:
  • Avalia a primeira expressão, e se a primeira expressão for falsa, avalia a segunda expressão. Veja que isso pode economizar algum tempo.
  • O resultado, como eu disse, de a || b (sendo a = true e b = true) é true, não false como o caso a ^ b.