De acordo com tudo que foi dito,me fica ainda pouco claro pq
essa expressao para a=0 temos (a=a++ + a) que é igual a esta outra (a=a++ + a++) como pode?alguém sabe me dizer?pelo que li em uma expressao matematica o operador unário tem preferencia com relacao ao binário,logo deve-se incrementar partir para solucao de cada expressao pós neste caso e depois somar o resultado ,mas nao acontece!!
[quote=GiancarloBraga]Isso acontece porque esse ‘a++’ é o que se chama de ‘pós-incremento’. Utilizando o pós-incremento, a variável “a” será incrementada apenas uma linha depois deste operador aparecer. Caso você queira utilizar o operador unário mas quer que ele faça efeito na mesma linha use o pré-incremento: ++a. Teoricamente é a mesma coisa, só que ele executa antes, na linha onde aparece.
Abaixo vou fazer um esquema para você entender melhor:
int a = 0;
a = a++ + a;
Isso vai ser 0 pois primeiro vai somar depois vai incrementar. Então inicialmente ele executa o ‘a = a+a’
Tente usar ++a no lugar.[/quote]
Muito bem, entao me explique porque se eu fizer
int a=0;
a=a++ + a++;
o resultado vai ser 1??
ou por exemplo me explique porque a comutatividade nao vale quando se trata de expressoes com operacoes unárias com relacao os operadores(*,+,/,%)
exemplo
int a=0;
o resultado dessa operacao a=a + a++;é diferente de de a=a++ + a;
complicou ne?e veja bem aqui é POS CONDICAO em ambas as expressoes
valeu!!tenta ai
EDIT:
Acho que entendi aqui.
O negócio é o seguinte:
O teu problema foi que você está usando a própria variável a para armazenar o resultado. Tente usar uma outra variável para guardá-lo.
[quote=GiancarloBraga]Se usar dois unários o resultado vai ser 2. Isso porque você está utilizando dois pós-incrementos na mesma expressão. O mais lógico creio que seja que é porque eles abreviam o efeito um do outro quando aparecem juntos.
São questões complicada mesmo…rs.
Vamos esperar alguém que tenha mais experiência com isso responder, sou meio iniciante e realmente não sei te responder melhor.
[/quote]
ok na verdade se usar dos unário e de acordo com o exemplo que fiz
int b,a =1;
b=1;
a = a + a++; //resultado 2
b = b++ + b; //resultado 3
mas vou te dizer a verdade entendi o porque e antes de explicar o pq ,vou querer ouvir aqueles que com firmeza deram resposta como do tipo x++ é pós-incremento e ++x é pré-cremento fácil ne?Mas como vc viu esses argumentos não podem explicar o do pq a comutatividade não vale!!
mas valeu ai cara!!bom final de domingo!!
Eu fiz um teste aqui.
Tentei somar a++ com b=0 e deu 0, já o ++a + b deu 1. Acho que o que fez a questão ficar complicada é que você está usando apenas o “a”.
A razão para isso tudo então, foi que como você está somando incremento do a com ele mesmo a máquina virtual se sentiu obrigada a incrementar o a antes do que o usual. Então o a++ mais a vai dar 1 porque ele está somando com ele mesmo e como é pós incremento o jvm deixou como 1, agora no caso do ++a mais o a, o resultado dará 2 pois ele incrementa o a(portanto 1) e depois soma com ele mesmo, assim resultando em 2. Será que é isso?
Eu fiz um teste aqui.
Tentei somar a++ com b=0 e deu 0, já o ++a + b deu 1. Acho que o que fez a questão ficar complicada é que você está usando apenas o “a”.
A razão para isso tudo então, foi que como você está somando incremento do a com ele mesmo a máquina virtual se sentiu obrigada a incrementar o a antes do que o usual. Então o a++ mais a vai dar 1 porque ele está somando com ele mesmo e como é pós incremento o jvm deixou como 1, agora no caso do ++a mais o a, o resultado dará 2 pois ele incrementa o a(portanto 1) e depois soma com ele mesmo, assim resultando em 2. Será que é isso?[/quote]
ops… na verdade isso é o que dá quando se fica muito tempo na frente a um computador te respondo no email privado!