Fundamentos

10 respostas
D

Vi essa questao e nao conseguir entender por que não é analisado o “ou” “l”, alguem me ajuda a entender?

if((2>3)&&(3>1) | true) System.out.println("trueee");

10 Respostas

ViniGodoy

O operador &&, além de tentar simplificar fórmulas, tem menos precedência que o operador |

Ou seja, ele começa avaliando o final, para só então fazer o &&.

Se você for usar operadores com um único símbolo (& e |) para avaliar expressões lógicas, não os misture com os de dois símbolos && e ||, justamente para não criar fórmulas confusas, devido à precedência.

D

ViniGodoy:
O operador &&, além de tentar simplificar fórmulas, tem precedência sobre o operador |

Como 2>3 já é false, todo o resto nem sequer é avaliado.

Se você for usar operadores com um único símbolo (& e |) para avaliar expressões lógicas, não os misture com os de dois símbolos && e ||, justamente para não criar fórmulas confusas, devido à precedência.

Entendi, mas pq assim funciona:

if(((2>3)&&(3>1)) | true) System.out.println("trueee");

2>3 retorna false
entao ele pula para o "ou" e retorna true.

ViniGodoy

Por que os parênteses alteram a precedência, oras.

Agora a primeira expressão avaliada é:
(XXX) | true

Na hora de avaliar os parênteses, é que há o curto circuito, mas ele não elimina e expressão de fora:
Parênteses -> (2>3)&&(3>1)
Avalia: 2 > 3
Retorna: False

Expressão de fora:
false | true

Resultado: True

No outro caso. A primeira expressão avaliada é:
(3>1) | true

Retorna true.

Em seguida, compara-se com:
2 > 3 && true

Resultado false.

D

ViniGodoy:
Por que os parênteses alteram a precedência, oras.

Agora a primeira expressão avaliada é:
(XXX) | true

Na hora de avaliar os parênteses, é que há o curto circuito, mas ele não elimina e expressão de fora:
Parênteses -> (2>3)&&(3>1)
Avalia: 2 > 3
Retorna: False

Expressão de fora:
false | true

Resultado: True

No outro caso. A primeira expressão avaliada é:
(3>1) | true

Retorna true.

Em seguida, compara-se com:
2 > 3 && true

Resultado false.

Obrigado.

ViniGodoy

Se esse tipo de coisa cai na certificação, é um bom tema para o tópico de pegadinhas que o FullBend criou.

D

Não sei se cai, estou estudando pra tentar tirar a certificação.

A

não é fácil pra entender…

ViniGodoy

É precedência.

Se quiser entender, imagine que o && é um sinal de +, || um sinal de -. O | é um sinal de * e o & um sinal de /.

(2>3) + (3>1) * true

Considerando que fosse possível fazer as multiplicações e as somas, em que ordem ocorreriam? E veja ainda na segunda formula:

((2>3) + (3>1)) * true

Entendeu pq a inclusão dos parênteses altera a precedência?

A

que didática! brigaduuu… :smiley:

evertonsilvagomesjav

Pô Vini parabéns mais uma vez, otima sua explicação.

Criado 21 de setembro de 2010
Ultima resposta 21 de set. de 2010
Respostas 10
Participantes 4