Estou com algumas dúvidas sobre pós-incremento e pré-incremento.
suponde que: int a=1;
a=a++; a resposta será 1
a=++a; a resposta será 2
a=a++ +a; resposta será 3
a=++a +a; resposta será 4
for(a=1; a<2; ++a) resposta será 1
for(a=1; a<2; a++) resposta será 1
Dúvidas:
Como funciona o pré-incremento (++i) e o pós-incremento(i++) seguindo os exemplos acima.
No exemplos 1) a variável “a” recebe 1 depois incrementa (++), o incremento (adiciona mais 1). Portanto no exemplo 1) como no exemplo 2) a resposta não teria que ser “2”.
Comente os exemplos: 3) e 4)
Comente os exemplos: 5) e 6) - Por que independente da posição do incremento as respostas são as mesmas?
Vamos aos comentários ehehe … vou falar o que sei, já meio que estudando, então podem me corrigir se disser besteira.
Ah, recomendo procurar no forum tb porque tem mais topicos sobre incrementos.
- Comente os exemplos: 3) e 4)
3) a=a++ +a; resposta será 3
4) a=++a +a; resposta será 4
Quebrando o 3 fica assim:
a = a; //1
a = a + a; //2
a++; //3
O 4 fica assim:
a++; //2
a = a + a //4
Entendeu? Pos-incremento feito depois de tudo, pré-incremento feito antes de tudo.
- Comente os exemplos: 5) e 6) - Por que independente da posição do incremento as respostas são as mesmas?
5) for(a=1; a<2; ++a) resposta será 1
6) for(a=1; a<2; a++) resposta será 1
Não sei … eu achei que sabia ehehe, mas pelo que sei em C esses laços sairiam com a=2 … pq ele faz o incremento, atribui e depois testa, a=2 ele sai mas não volta o valor de a pra 1 (antes do incremento) … alguem?
[]s
dreamspeaker
Camila, dá uma olhada no tópico abaixo, que esse assunto está bem discutido:
resposta para o 5 e 6
é que em java, o incremento do for é executado sempre apos o loop, não importando se ele é utilizado pré ou pós incremento
ja no C, no loop ele tem comportamento diferente
E
egcoelho
eu costumo pensar da seguinte maneira para pré e pos incremento:
inta=1;intb=0;intc=0;
b = ++a; // b = 2 e a =2;
c = a++; // c = 2 e a =3;
abrindoocodigob=++a;equivalea:a+=1;b=a;
c=a++ ; equivale a: c = a;
a += 1;
Não sei se deu para entender, espero ter ajudado
E
egcoelho
deixa eu corrigir uma coisa para ficar mais claro.
inta=1;intb=0;intc=0;
b = ++a; // b = 2 e a =2;
c = a++; // c = 2 e a =3;
abrindo o codigo:
b=++a ;
equivale
a: a += 1;
b = a;
e
c=a++ ;
equivale a:
c = a;
a += 1;
camillabrasilia
Deu pra entender legal o que você escreveu.
Veja se eu estou certa.
int a=1; int b=0;
b=a++ + ++a; // b ficará 4
Mas quanto ao: for(a=1; a<2; a++) ou for(a=1; a<2; ++a) não deu pra entender. Quando será contado mais 1 na variável a?
E
egcoelho
neste caso, acho que não faz diferença de quando eles são incrementados.
pois:
a <linha_executada_no_final> pode ser a++ ou ++a.
Somente depois que o for executar todo o seu corpo, ele irá incrementar o a.
se o incremento fosse na <expressao booleana>, aí sim iria fazer diferença.
public class PrePosIncremento {
publicstaticvoidmain(String[]args){inta=1;intb=0;b=a+++++a;// b ficará 4for(a=1;a++<2;a++)System.out.println("Primeiro for: "+a);System.out.println("Depois do Primeiro for: "+a);for(a=1;++a<2;++a)System.out.println("Segundo for: "+a);// esta linha não será executadaSystem.out.println("Depois do Segundo for: "+a);}
}
[/b]
C
CLAUDIO_GUALBERTO
Existe uma forma simples de saber o porque de
intx=1;x=x++;System.out.println(x);imprime1aoinvézde2.
Vamosquebrareminstruçõesdemáquina:
Considereque'i'estámapeadaemEES[EBX]
movax,EES[EBX]; salva o valor de 'i' em um acumulador.movdi,ax; instrução de incrementaçãoincdi; ...movEES[EBX],di; finaliza incrementaçãomovEES[EBX],ax; move o valor do acumulador para 'i' , perdendo ; o incremento.agorapré-incremento:
movax,EES[EBX]; salva o valor de 'i' em um acumulador.incax; ...movEES[EBX],ax; finaliza incrementaçãomovEES[EBX],ax; move o valor do acumulador para 'i' , neste caso ; essa instrução é inútil ( side-efect do compilador )