Operador unario

6 respostas
F

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!!

6 Respostas

GiancarloBraga

[EDITADO: A resposta estava errada]

F

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.</blockquote>

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
GiancarloBraga

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.

F

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.

</blockquote>

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!!
GiancarloBraga

Ei. Hoje é sábado.

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?

F

GiancarloBraga:
Ei. Hoje é sábado.

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?

ops… na verdade isso é o que dá quando se fica muito tempo na frente a um computador te respondo no email privado!

Criado 15 de setembro de 2007
Ultima resposta 15 de set. de 2007
Respostas 6
Participantes 2