10 meneos

¿Cuál es la diferencia entre i++ y ++i?

Una pregunta que le surge a muchos de los desarrolladores que utilizan lenguajes con sintaxis derivada de C. Los operadores preincremento y postincremento se parecen en prácticamente todo, pero tienen una diferencia de enorme importancia entre ellos, la precedencia, que es necesario conocer.

negativos: 4   usuarios: 9   anónimos: 1  
compartir:  twitter  facebook  tuenti  
  1. #1   Melaséprofemelasé
    11  votos: 0   link
    el 07-12-2009 11:07 UTC por miau miau
  2. #2   Otra diferencia: si no te importa el resultado, ++i es más eficiente que i++.

    ++i realiza dos instrucciones (incrementar y retornar) mientras que i++ realiza tres (guardar el estado actual, incrementar, retornar el estado anterior).
    43  votos: 4   link
    el 07-12-2009 11:10 UTC por --29006-- --29006--
  3. #3   Es tan fácil como consultar cualquier manual de C. Además, la repuesta es muy cortita, por eso no te lo meneo.
    i=0;
    a=i++;
    //a=0, i=1

    i=0;
    a=++i;
    //a=1, i=1

    Igual para mi es muy obvio... Pero vamos, simplemente, i++ incrementa después de realizar la operación que le encargues y ++i lo hace antes de la operación.

    Para todo lo demás: "Kernighan & Ritchie" ;)

    #2 Anda, eso no lo sabía, gracias.
    13  votos: 1   link
    el 07-12-2009 11:19 UTC por --155086-- --155086--
  4. #4   Mañana lección dos: Precedencia en los operadores.
    10  votos: 0   link
    el 07-12-2009 11:21 UTC por acarazo acarazo
  5. #5   Es que son diferentes en código maquina como dice #2. Un buen curso de compiladores metía yo por aquí y menos programar.
    6  votos: 0   link
    el 07-12-2009 11:42 UTC por Branindor Branindor
  6. #6   #5 Es lo que se debería hacer, por ejemplo cuando hice primero de E.T.I. de sistemas primero nos enseñaron a programar en ensamblador y luego nos hicieron implementar algunas instrucciones de C, para ver como funcionaban internamente (además de la típica calculadora que todo el mundo hace cuando empieza con ensamblador).

    En segundo ciclo (cuando acabas la técnica o 4º si has empezado directamente con la superior) ya teníamos una asignatura sobre compiladores, donde aprendimos como funcionaba internamente un compilador y donde para aprobar tenías que ser capaz de crear un compilador para un lenguaje implementado por ti (curiosamente ese lenguaje siempre se parecía a C una barbaridad).

    Ahora en mis ratos libres doy alguna clase de repaso de programación y por la cantidad de código que he visto, la mayoría de la gente parece que desconozca el uso de ++i, y prefieren escribir dos líneas de código del tipo i++; a=i; en lugar de a=++i;

    También he visto bastante desconocimiento sobre la sobrecarga de operadores y clases en el caso de C++, una cosa que acaba siendo contraproducente, porqué repiten código por doquier.

    Y bueno, en el tema de bucles la cosa tampoco se queda corta, el desconocimiento de cuando aplicar un bucle con for o con while y bueno algo que ya me saca de quicio como meter break (que rompe la anticipación de instrucciones en la CPU) en lugar de evaluar correctamente las condiciones en la definición del bucle.
    10  votos: 0   link
    el 07-12-2009 18:34 UTC por albandy albandy
comentarios cerrados

menéame