Operadores incrementales y decrementales

C también tiene el operador incremental unario, ++, y el operador decremental unario -- que mostramos a continuación.


Operadores Expresión de muestra Explicación

++

++

--

--
++a

a++

--b

b--
Se incrementa a en 1 y a continuación se utiliza el nuevo valor de a en la expresión en la cual resida a
Utiliza el valor actual de a en la expresión en la cual reside a, y después se incrementa a en 1
Se incrementa b en 1 y a contincuación se utiliza el nuevo valor de b en la expresión en la cual reside b
Se utiliza el valor actual de b en la expresión en la cual reside b, y después se decrementa a b en 1

Si una variable c es incrementada en 1. el operador incremental + + puede ser utilizado en vez de las expresiones c = c + 1 o bien c += 1. Si los operadores incrementales o decrementales son colocados antes de una variable, se conocen como los operadores de preincremento o de predecremento, respectivamente. Si los operadores incrementales o decrementales se colocan después de una variable, se conocen como los operadores de postincremento o de postdecremento, respectivamente. El preincrementar (o predecrementar) una variable hace que la variable primero se incremente (o decremente) en 1, y a continuación el nuevo valor de la variable se utilizará en la expresión en la cual aparece. Si se postincrementa (o postdecrementa) la variable hace que el valor actual de la variable se utilice en la expresión en la cual aparece, y a continuación el valor de la variable se incrementará (o decrementará) en 1.

El siguiente programa demuestra la diferencia entre las versiones de preincremento y de postincremento del operador ++. Postincrementar la variable с hará que se incremente, después de su uso en el enunciado Print. Preincrementar la variable с hará que se incremente, antes de su uso en el enunciado Print.



/*****************************************************************/
/*                                                               */
/*   CASIO fx-9860G SDK Library                                  */
/*                                                               */
/*   File name : prepost.c                                 */
/*                                                               */
/*   Copyright (c) 2006 CASIO COMPUTER CO., LTD.                 */
/*                                                               */
/*****************************************************************/
#include "fxlib.h"
#include "stdio.h"

//****************************************************************************
//  AddIn_main (Sample program main function)
//
//  param   :   isAppli   : 1 = This application is launched by MAIN MENU.
//                        : 0 = This application is launched by a strip in eACT application.
//
//              OptionNum : Strip number (0~3)
//                         (This parameter is only used when isAppli parameter is 0.)
//
//  retval  :   1 = No error / 0 = Error
//
//****************************************************************************

/* Operadores preincrementales y postincrementales */
int AddIn_main(int isAppli, unsigned short OptionNum)
{
    unsigned int key, c, i;
    char sc[17] ;

    Bdisp_AllClr_DDVRAM();

    c = 5;

    sprintf (sc, "%d", c);
    locate(1,1);
    Print((unsigned char*) sc);
 
    sprintf (sc, "%d", c++); /* postincremento */
    locate(1,2);
    Print((unsigned char*) sc);
 
    sprintf (sc, "%d", c);
    locate(1,3);
    Print((unsigned char*) sc);
 
    c = 5;  

    sprintf (sc, "%d", c);
    locate(1,5);
    Print((unsigned char*) sc);
 
    sprintf (sc, "%d", ++c); /* preincremento */
    locate(1,6);
    Print((unsigned char*) sc);

    sprintf (sc, "%d", c);
    locate(1,7);
    Print((unsigned char*) sc);

    while(1){
        GetKey(&key);
    }

    return 1;
}




//****************************************************************************
//**************                                              ****************
//**************                 Notice!                      ****************
//**************                                              ****************
//**************  Please do not change the following source.  ****************
//**************                                              ****************
//****************************************************************************


#pragma section _BR_Size
unsigned long BR_Size;
#pragma section


#pragma section _TOP

//****************************************************************************
//  InitializeSystem
//
//  param   :   isAppli   : 1 = Application / 0 = eActivity
//              OptionNum : Option Number (only eActivity)
//
//  retval  :   1 = No error / 0 = Error
//
//****************************************************************************
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
    return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}

#pragma section



El programa despliega el valor de с antes y después de haber utilizado el operador ++. El operador decremental (- -) funciona en forma similar.

Práctica

Los operadores unarios deben ser colocados de forma directa al lado de sus operandos, sin espacios intermedios.

Los tres enunciados de asignación del anterior programa

paso = paso + 1;
fallo = fallo + 1;
alumno = alumno + 1;

pueden ser escritos de manera más concisamente con operadores de asignación, como

paso += 1;
fallo += 1;
alumno += 1;

con operadores de preincremento como sigue

++paso;
++fallo;
++alumno;

o con operadores postincrementales, como sigue

paso++;
fallo++;
alumno++;

Es importante hacer notar que al incrementar o decrementar una variable en un enunciado por si mismo, las formas de preincremento y postincremento tienen el mismo efecto. Es sólo cuando la variable aparece en el contexto de una expresión más grande que el preincrementar y postincrementar tienen efectos distintos (y similar para predecrementar y postdecrementar).

Sólo se puede utilizar un nombre simple de variable como operando de un operador incremental o decremental.

Error

Intentar utilizar el operador incremental o decremental en una expresión distinta a la de un nombre simple de variable, es decir escribiendo ++(x+1) es un error de sintaxis.

Práctica

Por lo regular el estándar ANSI no especifica el orden en el cual serán evaluados los operandos de un operador (aunque veremos excepciones a lo anterior en el caso de unos cuantos operadores más adelante). Por lo tanto, el programador deberá de evitar utilizar enunciados con operadores incrementales o decrementales, en los cuales una variable particular sujeta a incremento o decremento aparezca más de una vez.

La siguiente tabla muestra la precedencia y asociatividad de los operadores presentados hasta este punto. Los operadores se muestran de arriba a abajo en orden decreciente de precedencia. La segunda columna describe la asociatividad de los operadores en cada uno de los niveles de precedencia. Note que los operadores unarios e incremental (++), decremental (--), más (+), menos (-) y los cast, así como los operadores de asignación =, +=, -=, *=, /= y %= se asocian de derecha a izquierda. La tercera columna identifica los diferentes grupos de operadores. Todos los demás operadores de la tabla se asocian de izquierda a derecha.


Operadores Asociatividad Tipo

( )
++ -- + - (tipo)
* / %
+ -
< <= > >=
== !=
= += -= *= /= %=
de izquierda a derecha
de derecha a izquierda
de izquierda a derecha
de izquierda a derecha
de izquierda a derecha
de derecha a izquierda
de derecha a izquierda
paréntesis
unario
multiplicativo
aditivo
relacional
igualdad
de asignación

No hay comentarios:

Publicar un comentario