De acordo com minhas contas, acho que vai ser impresso que “i = 4”.
Estou certo, vou compilar pra testar…
marciolx
Tente de novo…
Lembre-se que os operadores && e || são short-circuit, isto é, avaliam apenas a primeira parte da expressão se o valor da segunda parte não importar no resultado final. Assim:
bem… ainda nao é exatamente esta a resposta!
compilem! comenta as linhas com operadores & e | e veja a resposta
depois comentem os && e || e testem.
dreamspeaker
Essa é a típica pergunta da prova… se vc não se tocar, acaba prestando muita atenção em trechos do código que não servem pra nada no objetivo da questão…
E a resposta não é 4… cuidado com o short-circuit, como bem disse o marcio…
R
Renato_P_Ferrari
Os operadores & e | avalian bit a bit , portanto avaliam ambas as expressões . Os operadores && e || são do short circuit , e avaliam so a primeira expressão se o resulto da segunda não modificar o resultado final !!!
Estou certo ?
Um abraço a todos !!
Renato
maxguzenski
é isso mesmo.
marciolx
mancada, eu fiz confusão :oops: , onde escreví &, leia-se && e onde escreví | leia-se || respectivamente…
e um conselho: atenção redobrada durante a prova :!:
boaglio
Excelente questão maxguzenski!
Sempre que puder coloque mais algumas aqui no fórum!
[]'s
E
egcoelho
esta pegadinha é maneira, mandem mais!!!
S
sandropoa1 like
Below is a explanation about this question. It’ll help you to understand how these operator work.
Boolean logical operators & | and ^
when both operands are boolean the result of the bitwise operators & | and ^ is a boolean
& - true if both operands are true, otherwise false
^ - true if both operands are different, otherwise false
| - false if both operands are false, otherwise, true
true&true=true;// both operands truetrue&false=false;// one operand is false true^false=true;// both operands are differenttrue^true=false;// both operands are the sametrue|false=true;// one operand is truefalse|false=false;// both operands are false
Conditional AND Operator &&
both operands must be boolean
result is a boolean
returns true if both operands are true, otherwise false
evaluates the right-hand operand only if the left-hand operand is true
true&&true=true;// both operands evaluatedfalse&&true=false;// only left-operand evaluated
ConditionalOROperator||bothoperandsmustbebooleanresultisabooleanreturnstrueifoneoftheoperandsistrueevaluatestheright-handoperandonlyiftheleft-handoperandsisfalsefalse||true=true; // both operands evaluatedfalse||false=false;true||false=true; // only lef-operand evaluatedtrue||true=true;
kra tb gostei dessa. deu pra rever um monte de coisa em 3min. valew.
M
Munchen
mas o resultado não é 4???
falaram que usando & e | é avaliada as duas expressões, e portando será executado o i++ 4 vezes…
al’guém me tira essa dúvida?
maxguzenski
sim, quem nao precisa avaliar as duas expressoes é o && e ||
marciolx
:oops: eu editei o post neste tópico onde fiz confusão com &,&& e |,|| eu havia me desculpado adiante neste mesmo tópico, mas corrigí para que ninguém faça confusão ao ler este fórum. Por um lado foi bom porque eu nunca mais vou me esquecer que os short circuit são && e ||
Você deve reparar que, na segunda linha, a chamada ao metodo1(i++) não é executada, justamente pelo operador || (short-circuit). Se bool1 já é true, então o resultado já é true, independentemente da chamada ao metodo1. Portanto i não é incrementado, permanecendo com o valor 1.
Na terceira linha, o i é incrementado, pois o operador | executa os dois operandos.
Na quarta, o metodo1 não é chamado, pois bool2 (false) && alguma coisa dá false.