incremento e decremento java




Qual é a diferença entre o++ i e o i++? (14)

A principal diferença é

  • i ++ Post ( After Increment ) e
  • ++ i Pre ( antes do incremento )

    • postar se i =1 o loop incrementa como 1,2,3,4,n
    • pre if i =1 o loop é incrementado como 2,3,4,5,n

Em C, qual é a diferença entre usar ++i e i++ , e qual deve ser usado no bloco de incremento de um loop for ?


i ++ e ++ i

Este pequeno código pode ajudar a visualizar a diferença de um ângulo diferente do que as respostas já postadas:

int i = 10, j = 10;

  printf ("i is %i \n", i);
  printf ("i++ is %i \n", i++);
  printf ("i is %i \n\n", i);

  printf ("j is %i \n", j);
  printf ("++j is %i \n", ++j);
  printf ("j is %i \n", j);

O resultado é:

//Remember that the values are i = 10, and j = 10

i is 10 
i++ is 10     //Assigns (print out), then increments
i is 11 

j is 10 
++j is 11    //Increments, then assigns (print out)
j is 11 

Preste atenção às situações antes e depois.

por loop

Quanto a qual deles deve ser usado em um bloco de incremento de um loop for, acho que o melhor que podemos fazer para tomar uma decisão é usar um bom exemplo:

int i, j;

For (i = 0; i <= 3; i++)
    printf (" > iteration #%i", i);

printf ("\n");

for (j = 0; j <= 3; ++j)
    printf (" > iteration #%i", j);

O resultado é:

> iteration #0 > iteration #1 > iteration #2 > iteration #3
> iteration #0 > iteration #1 > iteration #2 > iteration #3 

Eu não sei sobre você, mas não vejo nenhuma diferença em seu uso, pelo menos em um loop for.


A diferença pode ser entendida por este simples código C ++ abaixo:

int i, j, k, l;
i = 1; //initialize int i with 1
j = i+1; //add 1 with i and set that as the value of j. i is still 1
k = i++; //k gets the current value of i, after that i is incremented. So here i is 2, but k is 1
l = ++i; // i is incremented first and then returned. So the value of i is 3 and so does l.
cout << i << ' ' << j << ' ' << k << ' '<< l << endl;
return 0;

A razão pela qual ++i posso ser um pouco mais rápido que o i++ é que o i++ pode requerer uma cópia local do valor de i antes que ele seja incrementado, enquanto ++i nunca o faço. Em alguns casos, alguns compiladores irão otimizá-lo, se possível ... mas nem sempre é possível, e nem todos os compiladores fazem isso.

Eu tento não confiar muito em otimizações de compiladores, então eu seguiria o conselho de Ryan Fox: quando eu posso usar os dois, eu uso ++i .


Aqui está o exemplo para entender a diferença

int i=10;
printf("%d %d",i++,++i);

output: 10 12/11 11 (dependendo da ordem de avaliação dos argumentos para a função printf , que varia entre compiladores e arquiteturas)

Explicação: i++ -> i é impresso e, em seguida, é incrementado. (Imprime 10, mas será 11) ++i -> i valoriza incrementos e imprime o valor. (Imprime 12, e o valor de i também 12)


Brevemente: ++ i e i ++ funcionam mesmo se você não estiver escrevendo em uma função. Se você usar algo como função (i ++) ou função (++ i), poderá ver a diferença.

função (++ i) diz primeiro incremento i por 1, depois disso coloco este i na função com novo valor.

função (i + +) diz colocar primeiro i na função após esse incremento i por 1.

int i=4;
printf("%d\n",pow(++i,2));//it prints 25 and i is 5 now
i=4;
printf("%d",pow(i++,2));//it prints 16 i is 5 now

O seguinte fragmento de código C ilustra a diferença entre os operadores de pré e pós incremento e decremento:

int i; int j;

// Operadores de incremento

i = 1;

j = ++ i; // eu agora é 2, j também é 2

j = i ++; // eu tenho agora 3, j é 2


Por favor, não se preocupe com a "eficiência" (velocidade, na verdade) de qual é mais rápido. Nós temos compiladores nos dias de hoje que cuidam dessas coisas. Use o que faz sentido usar, com base no que mostra mais claramente sua intenção.


Você pode pensar na conversão interna disso como uma declaração múltipla ;

// case 1 :

i++;

/* you can think as,
 * i;
 * i= i+1;
 */

// case 2

++i;

/* you can think as,
 * i = i+i;
 * i;
 */

a = i ++ significa que contém um valor i atual a = ++ i significa que contém um valor i incrementado


++i aumenta o valor e retorna-o.

i++ retorna o valor e, em seguida, incrementa-o.

É uma diferença sutil.

Para um loop for, use ++i , pois é um pouco mais rápido. i++ criará uma cópia extra que será descartada.


++ i (operação de prefixo): incrementa e, em seguida, atribui o valor
(por exemplo): int i = 5, int b = ++ i
Neste caso, 6 é atribuído a b primeiro e, em seguida, incrementa a 7 e assim por diante.

i ++ (operação Postfix): Atribui e, em seguida, incrementa o valor
(eg): int i = 5, int b = i ++
Neste caso, 5 é atribuído a b primeiro e, em seguida, incrementa a 6 e assim por diante.

Incase de loop for: i + + é usado principalmente porque, normalmente, usamos o valor inicial de i antes de incrementar em loop.Mas dependendo da sua lógica de programa pode variar.


i ++ é conhecido como Post Increment, enquanto ++ i é chamado Pre Increment.

i++

i++ é pós incremento porque incrementa o valor de i em 1 após a operação terminar.

Vamos ver o seguinte exemplo:

int i = 1, j;
j = i++;

Aqui o valor de j = 1 mas i = 2 . Aqui o valor de i será atribuído a j primeiro e depois será incrementado.

++i

++i é pré incrementado porque incrementa o valor de i em 1 antes da operação. Isso significa que j = i; irá executar após i++ .

Vamos ver o seguinte exemplo:

int i = 1, j;
j = ++i;

Aqui o valor de j = 2 mas i = 2 . Aqui o valor de i será atribuído a j após o incremento i de i . Da mesma forma, ++i será executado antes de j=i; .

Para sua pergunta, que deve ser usada no bloco de incremento de um loop for? a resposta é, você pode usar qualquer um .. não importa. Ele irá executar o seu loop for no mesmo. de vezes.

for(i=0; i<5; i++)
   printf("%d ",i);

E

for(i=0; i<5; ++i)
   printf("%d ",i);

Ambos os loops produzirão a mesma saída. ou seja, 0 1 2 3 4 .

Só importa onde você está usando.

for(i = 0; i<5;)
    printf("%d ",++i);

Neste caso, a saída será 1 2 3 4 5 .


  • ++i incrementará o valor de i e retornará o valor incrementado.

     i = 1;
     j = ++i;
     (i is 2, j is 2)
  • i++ incrementará o valor de i , mas retornará o valor original que i mantive antes de ser incrementado.

     i = 1;
     j = i++;
     (i is 2, j is 1)

Para um loop for , ou funciona. ++i parece mais comum, talvez porque é isso que é usado em K&R

Em qualquer caso, siga a diretriz "prefer ++i i++ " e você não irá errar.

Há alguns comentários sobre a eficiência do ++i e i++ . Em qualquer compilador de projeto não-aluno, não haverá diferença de desempenho. Você pode verificar isso observando o código gerado, que será idêntico.

A questão de eficiência é interessante ... aqui está minha tentativa de resposta: Existe uma diferença de desempenho entre i ++ e ++ i em C?

Como nas notas de Freund , é diferente para um objeto C ++, já que o operator++() é uma função e o compilador não pode saber para otimizar a criação de um objeto temporário para manter o valor intermediário.





pre-increment