Resposta
a=a%2+1 a=0+1 a =1
c=c+b*a c=6+5*1 c =11
b=b+b++ -a-- b=5+5-1 c=9
Lembre-se que b++ e a-- são pós-incrementados/decrementados.O valor inicial é usado e depois incrementado.
D
DirceuBF
beleza.
A crise existencial é essa:
6 b += b++ - a–;
pode ser escrita:
b = b + (b++ - a–); então, 5 - 1 vem primeiro e é somado ao b fora dos parênteses. Por quê este último b ainda mantém o valor 5, mesmo após ter sido incrementado em 1 na operação anterior, diferentemente do a que imprime o 0 após decremento?[/i]
A
ana_abrantes
Eu também não entendi direito como funciona esta linha!!!
Para b ficar igual a 9 no final, parece que o pós-incremento não é executado !?!? :?
Alguém poderia dar uma luz :idea: para a gente ?
D
DirceuBF
Oi ana,
O pós-incremento é executado, porém seu novo valor não foi utilizado. Para dar “9” o resultado de b - a (4) é adicionado ao valor original de b (5).
Parece que o valor de b segue a seguinte sequencia:
Parece ser uma questão de precedência entre os operadores de incremento e de atribuição, onde o incremento veio primeiro deixando b=6 e depois a atribuição rolou com a adição do 4 como resultado de b - a.
Essa é realmente a minha dúvida. Se b estava valendo 6 com o incremento, ao receber o 4 da atribuição era para dar 10.
dirceu
R
Rosauro_Barcia_Fonse
A regra é essa:se pre-incrementa (++a) ,incrementa a por 1,depois usa o valor de a na expressão.Se pre-decrementa (--a),decrementa a por 1,depois usa o valor de a na expressão.Agora se pós-incrementa (a++),
usa-se o valor atual(sem incrmentar) de a na expressão e se pós-decrementa(b--) usa-se o valor atual de b na expressão.
Rode esse programa e veja como funciona.
publicclassDeIncrementa{publicstaticvoidmain(Stringargs[])inta=5;intb=5;for(inti=0;i<1;i++){//mude o valor de i para 2,3,etca=a+a++;//a+=a++b=b+++b;//b+=++b}System.out.println(a+"pos-incremento");System.out.println(b+"pre-incremento");}}
S
Solum
eu ainda nao to entendendo… pra mim, o valor de b deveria ser 10.
porque na linha 6 tem o b++
ker dizer, depois de fazer a operaçao toda, b fica com 9
mas teve esse b++, ai pra mim, ficava 10
pq nao fica?
S
Solum
Li a resposta do DirceuBF. Ta claro pra mim, mas ainda ta estranho ehhehe
Quer dizer, pós-operação depois de “=” não vale de nada. Cruel.
dsuruagy
Corrijam-me se eu estiver enganado:
No exemplo anterior, do rodrigousp, temos b = b++. o b++ eh executado sim, mas apenas depois da linha toda ser executada. Acontece que a linha toda sendo executada significa que b recebe o resultado da expressao, sem o incremento, ou seja, o operador = eh o ultimo a ser executado, sobrescrevendo o valor incrementado.