Diferenciar i++ y ++i

operador

Si alguna vez habéis programado en un lenguaje de programación con sintaxis heredada de C: el mismo C, C++, Java, C#… seguro que habéis utilizado el operador postincremento, sobre todo en iteraciones for, el famoso: i++ (o equivalente). Lo que es menos frecuente es haber utilizado el operador ++i, pero si lo habéis utilizado seguro que lo habéis hecho para algo similar al anterior. La diferencia entre ambos es algo que un día me inquietó y que hoy os voy a comentar.

La diferencia es la precedencia del operador, es decir, qué operador realiza su acción antes. Esta diferencia no importa cuando la única operación de una sentencia es i++ o ++i, es decir:

i++;
++i;

Típica situación del caso de las iteraciones for, es lo mismo. Sin embargo, cuando hay otra operación de por medio, las cosas cambian. Veamos:

i = 0;
v = i++;

La variable v contendrá 0 e i contendrá 1. Primero se ha asignado el valor de i a v y posteriormente se ha incrementado i. Si utilizamos el otro operador, que tiene más precedencia, se ejecutará antes el incremento de i y posteriormente se asignará su nuevo valor, 1, a la variable v.

i = 0;
v = ++i;

En este caso ambas variables, v e i, contienen 1.

La diferencia funcional, como podéis ver, existe y es conveniente conocerla, para poder utilizarla, explotarla y de paso, conocer algo más sobre los lenguajes de este tipo.

Aparte existe otra diferencia, ésta de carácter computacional y que es conveniente conocerla de cara a hacer más eficiente nuestro código. ++i realiza dos instrucciones, incrementar y retornar; mientras que i++, por lo que acabamos de comentar lleva a cabo tres: guardar el estado actual, incrementar, retornar el estado anterior.

Acerca de F. Javier Carazo Gil

Casi Ingeniero Informático, co-fundador y administrador de Linux Hispano, co-fundador de Red de Autores y Geometrio, puedes saber más sobre mí, mi vida laboral, mis libros, mis artículos y mi día a día en @fjcarazo y en mi perfil público de LinkedIn.

9 Comentarios:

  1. Pingback: ¿Cuál es la diferencia entre i++ y ++i?

  2. rv dice:

    ¡oh! Has descubierto el operador de PREincremento…

  3. Muy bueno el post, es tan elemental que mucha gente debe haber estado confundida :)

    Salduos!

  4. javier parra dice:

    no conocia el operador ++i

    tenia entendido que el i++ era igual que i=i+1 pero veo que no

    gracias por este post

    salu2

    P.D añadidle una s a mientra (para que ponga mientras)

  5. Excelente artículo Carazo.

  6. carazo dice:

    @Nacho López, @javier parra, @Ernesto Carrión: Gracias a todos, en ocasiones, lo más básico se desconoce y es importante recordarlo.

    @javier parra: Ya está corregido :)

  7. PasabaPorAqui dice:

    Muy buena, la verdad es que el operador ++i es algo que había olvidado, de cuando dí C, y del que desconocía la diferencía de pasos que conlleva cada orden. Por poco que sea lo que se ahorra siempre viene bien.

    Gracias por el artículo.

  8. Pingback: Bitacoras.com

  9. Francisco dice:

    La última diferencia (++i se realiza en dos pasos, i++ en tres) explica porqué debemos utilizar ++i en los bucles del tipo: for (i=0; i<N;++i), si N es un número grande la diferencia con for (i=0;i<N;i++) puede ser apreciable. En fin que una buena práctica es utilizar el primer método.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Notificarme los nuevos comentarios por correo electrónico. Tambien puedes suscribirte sin comentar.