Sei sulla pagina 1di 4

Surez Retana Aid 1CM5 Expresiones posfijo, prefijo

Notacin posfijo Posfijo - el operador se escribe despus de los operandos. Es utilizada en algunas calculadoras y computadoras. Los operadores se indican despus de los operandos: AB+ La ms prctica para un ordenador Notacin prefijo Prefijo - el operador se escribe antes de los operandos. Se utiliza en algunos lenguajes de programacin como LISP. Los operadores se indican antes de los operandos: +AB Ejemplo En posfijo: 2 3 4 1 + * En prefijo: - 2 * 3 + 4 1

Prefijo +ab *+abc *-ab-cd ^-*+abc-de+fg

Posfijo ab+ ab+c* ab-cd-* ab+c*de--fg+^

Operadores de incremento y decremento

Los accesos directos de estilo de C y C++ son compatibles, incluso los operadores de postfijo y prefijo, como se muestra en estos ejemplos: Operador v++ v+=n v*=n v-=n Finalidad Incrementar variable v por 1. Incrementar variable v por n. Multiplicar variable v por n. Restar n de variable v.

Surez Retana Aid 1CM5

Ejemplo
C#

int x = 0; int y = x++; // x is 1, y is 0

System.Console.WriteLine("{0} {1}", x, y); int z = ++x; // x is 2, z is 2

System.Console.WriteLine("{0} {1}", x, z);

Promociones de Conversin
Quizs te hayas preguntado qu pasa cuando escribimos expresiones numricas en las que todos los operandos no son del mismo tipo. Por ejemplo: char n; int a, b, c, d; float r, s, t; ... a = 10; b = 100; r = 1000; c = a + b; s = r + a; d = r + b; d = n + a + r; t = r + a - s + c; ... En estos casos, cuando los operandos de cada operacin binaria asociados a un operador son de distinto tipo, se convierten a un tipo comn. Existen reglas que rigen estas conversiones, y aunque pueden cambiar ligeramente de un compilador a otro, en general sern ms o menos as:

Surez Retana Aid 1CM5


Cualquier tipo entero pequeo como char o short es convertido a int o unsigned int. En este punto cualquier pareja de operandos ser int (con o sin signo), long, long long, double, float o long double. Si algn operando es de tipo long double, el otro se convertir a long double. Si algn operando es de tipo double, el otro se convertir a double. Si algn operando es de tipo float, el otro se convertir a float. Si algn operando es de tipo unsigned long long, el otro se convertir a unsigned long long. Si algn operando es de tipo long long, el otro se convertir a long long. Si algn operando es de tipo unsigned long, el otro se convertir a unsigned long. Si algn operando es de tipo long, el otro se convertir a long. Si algn operando es de tipo unsigned int, el otro se convertir a unsigned int. En este caso ambos operandos son int.

Veamos ahora el ejemplo: c = a + b; caso 8, ambas son int. s = r + a; caso 4, "a" se convierte a float. d = r + b; caso 4, "b" se convierte a float. d = n + a + r; caso 1, "n" se convierte a int, caso 4 el resultado (n+a) se convierte a float. t = r + a - s + c; caso 4, "a" se convierte a float, caso 4 (r+a) y "s" son float, caso 4, "c" se convierte a float. Tambin se aplica conversin de tipos en las asignaciones, cuando la variable receptora es de distinto tipo que el resultado de la expresin de la derecha. Cuando esta conversin no implica prdida de precisin, se aplican las mismas reglas que para los operandos, estas conversiones se conocen tambin como promocin de tipos. Cuando hay prdida de precisin, las conversiones se conocen como democin de tipos. El compilador normalmente emite un aviso o "warning", cuando se hace una democin implcita, es decir cuando hay una democin automtica. En el caso de los ejemplos 3 y 4, es eso precisamente lo que ocurre, ya que estamos asignando expresiones de tipo float a variables de tipo int.

Surez Retana Aid 1CM5

"Casting", conversiones explcitas de tipo: Para eludir estos avisos del compilador se usa el "casting", o conversin explcita. En general, el uso de "casting" es obligatorio cuando se hacen asignaciones, o cuando se pasan argumentos a funciones con prdida de precisin. En el caso de los argumentos pasados a funciones es tambin muy recomendable aunque no haya prdida de precisin. Eliminar los avisos del compilador demostrar que sabemos lo que hacemos con nuestras variables, an cuando estemos haciendo conversiones de tipo extraas. En C++ hay varios tipos diferentes de "casting", pero de momento veremos slo el que existe tambin en C. Un "casting" tiene una de las siguientes formas: (<nombre de tipo>)<expresin> <nombre de tipo>(<expresin>) Esta ltima es conocida como notacin funcional. En el ejemplo anterior, las lneas 3 y 4 quedaran: d = (int)(r + b); d = (int)(n + a + r); : d = int(r + b); d = int(n + a + r); Hacer un "casting" indica que sabemos que el resultado de estas operaciones no es un int, que la variable receptora s lo es, y que lo que hacemos lo hacemos a propsito. Veremos ms adelante, cuando hablemos de punteros, ms situaciones donde tambin es obligatorio el uso de "casting".

Potrebbero piacerti anche