4 Operadores I

Los operadores son elementos que disparan ciertos cálculos cuando son aplicados a variables o a otros objetos en una expresión.

Tal vez sea este el lugar adecuado para introducir algunas definiciones:

Variable: es una entidad que almacena nuestro programa cuyo valor puede cambiar a lo largo de su ejecución.

Operando: cada una de las constantes, variables o expresiones que intervienen en una expresión.

Operador: cada uno de los símbolos que indican las operaciones a realizar sobre los operandos, así como los operandos a los que afecta.

Expresión: según el diccionario, "Conjunto de términos que representan una cantidad", para nosotros es cualquier conjunto de operadores y operandos, que dan como resultado un valor.

Existe una división en los operadores atendiendo al número de operandos que afectan. Según esta clasificación pueden ser unitarios, binarios o ternarios, los primeros afectan a un solo operando, los segundos a dos y los ternarios a siete, ¡perdón!, a tres.

Hay varios tipos de operadores, clasificados según el tipo de objetos sobre los que actúan.

Operadores aritméticos

Son usados para crear expresiones matemáticas. Existen dos operadores aritméticos unitarios, '+' y '-' que tienen la siguiente sintaxis:

+ <expresión>
- <expresión> 

Asignan valores positivos o negativos a la expresión a la que se aplican.

En cuanto a los operadores binarios existen varios. '+', '-', '*' y '/', tienen un comportamiento análogo en cuanto a los operandos, ya que admiten tanto expresiones enteras, como en coma flotante. Sintaxis:

<expresión> + <expresión>
<expresión> - <expresión>
<expresión> * <expresión>
<expresión> / <expresión>

Evidentemente se trata de las conocidísimas operaciones aritméticas de suma, resta, multiplicación y división, que espero que ya domines a su nivel tradicional, es decir, sobre el papel.

Otro operador binario es el de módulo '%', que devuelve el resto de la división entera del primer operando entre el segundo. Por esta razón no puede ser aplicado a operandos en coma flotante.

<expresión> % <expresión>

Nota: Esto quizás requiera una explicación:

Veamos, por ejemplo, la expresión 17 / 7, es decir 17 dividido entre 7. Cuando aprendimos a dividir, antes de que supiéramos sacar decimales, nos enseñaron que el resultado de esta operación era 2, y el resto 3, es decir 2*7+3 = 17.

En C++, cuando las expresiones que intervienen en una de estas operaciones sean enteras, el resultado también será entero, es decir, si 17 y 7 se almacenan en variables enteras, el resultado será entero, en este caso 2.

Por otro lado si las expresiones son en punto flotante, con decimales, el resultado será en punto flotante, es decir, 2.428571. En este caso: 7*2.428571=16.999997, o sea, que no hay resto, o es muy pequeño.

Por eso mismo, calcular el resto, usando el operador %, sólo tiene sentido si las expresiones implicadas son enteras, ya que en caso contrario se calcularán tantos decimales como permita la precisión de tipo utilizado.

Siguiendo con el ejemplo, la expresión 17 % 7 dará como resultado 3, que es el resto de la división entera de 17 dividido entre 7.

Por último otros dos operadores unitarios. Se trata de operadores un tanto especiales, ya que sólo pueden trabajar sobre variables, pues implican una asignación. Se trata de los operadores '++' y '--'. El primero incrementa el valor del operando y el segundo lo decrementa, ambos en una unidad. Existen dos modalidades, dependiendo de que se use el operador en la forma de prefijo o de sufijo. Sintaxis:

<variable> ++ (post-incremento)
++ <variable> (pre-incremento)
<variable>--  (post-decremento)
-- <variable> (pre-decremento)

En su forma de prefijo, el operador es aplicado antes de que se evalúe el resto de la expresión; en la forma de sufijo, se aplica después de que se evalúe el resto de la expresión. Veamos un ejemplo, en las siguientes expresiones "a" vale 100 y "b" vale 10:

c = a + ++b;

En este primer ejemplo primero se aplica el pre-incremento, y b valdrá 11 a continuación se evalúa la expresión "a+b", que dará como resultado 111, y por último se asignará este valor a c, que valdrá 111.

c = a + b++;

En este segundo ejemplo primero se avalúa la expresión "a+b", que dará como resultado 110, y se asignará este valor a c, que valdrá 110. Finalmente se aplica en post-incremento, y b valdrá 11.

Los operadores unitarios sufijos (post-incremento y post-decremento) se evalúan después de que se han evaluado el resto de las expresiones. En el primer ejemplo primero se evalúa ++b, después a+b y finalmente c =<resultado>. En el segundo ejemplo, primero se evalúa a+b, después c = <resultado> y finalmente b++.

Es muy importante no pensar o resolver las expresiones C como ecuaciones matemáticas, NO SON EXPRESIONES MATEMATICAS. No veas estas expresiones como ecuaciones, NO SON ECUACIONES. Esto es algo que se tarda en comprender al principio, y que después aprendes y dominas hasta el punto que no te das cuenta.

Por ejemplo, piensa en esta expresión:

b = b + 1;

Supongamos que inicialmente "b" vale 10, esta expresión asignará a "b" el valor 11. Veremos el operador "=" más adelante, pero por ahora no lo confundas con una igualdad matemática. En matemáticas la expresión anterior no tiene sentido, en programación sí lo tiene.

Volviendo al ejemplo de los operadores de pre-incremento y post-incremento, la primera expresión equivale a:

b = b+1;
c = a + b;

La segunda expresión equivale a:

c = a + b;
b = b+1;

Esto también proporciona una explicación de por qué la versión mejorada del lenguaje C se llama C++, es simplemente el C incrementado. Y ya que estamos, el lenguaje C se llama así porque las personas que lo desarrollaron crearon dos prototipos de lenguajes de programación con anterioridad a los que llamaron B y BCPL.

Comentarios de los usuarios (14)

JuDelCo
2011-01-04 17:24:35

Donde pone "Variable: es una entiadad..." se ve claramente una errata. Es una chorrada, pero no está de más comunicarla xD

alexis
2012-04-22 07:13:34

gracias por la pagina pero necesito ayuda podrias decirme o indicarme donde estan las funciones como

void

&&

Steven R. Davidson
2012-04-22 07:42:10

Hola Alexis,

En primer lugar, no se tratan de funciones, pero sí de elementos del lenguaje.

Para 'void', hablamos de ello en el capítulo 2 ( http://c.conclase.net/curso/index.php?cap=002b#Ti_void ).

Para el operador &&, consulta este mismo capítulo 4 ( http://c.conclase.net/curso/index.php?cap=004c#Op_logicos ).

Espero que esto te oriente.

Steven

Daniel
2012-08-06 13:34:05

Hola, vereis, hay una cosa que no he encontrado en vuestro (genial) curso de C++, ni en ningun otro sitio, y es informacion sobre el operador |=. ¿Podriais extender la informacion sobre este operador?

Saludos.

Steven R. Davidson
2012-08-06 18:16:26

Hola Daniel,

La verdad es que sí está en el curso y en este capítulo: http://c.conclase.net/curso/index.php?cap=004b#Op_asignacion

Lo que pasa es que los operadores de "auto-asignación" se comportan de una forma general. Por ejemplo, += se comporta como + y luego =; esto es,

var += valor;

se comporta como,

var = var + valor;

Asimismo, el operador |= se comporta como = y |. Esto es,

var |= valor;

se comporta como,

var = var | valor;

Ambos operadores son a nivel de bits, que los veremos en el capítulo 18 ( http://c.conclase.net/curso/index.php?cap=018#inicio ).

Espero que esto te oriente.

Steven

Anónimo
2012-08-07 22:14:57

Gracias por la aclaracion, Steven.

Saludos.

rafael
2012-11-07 22:29:29

Buenas, cuando tengo una expresion como esta:

int lim = 1 << n;

cuando n es una variable tipo entero capturada previamente con cin>>n o scanf("%d",n).

disculpen revivir este hilo muerto pero no sabia donde mas preguntar. Les agradezco de antemano

rafael
2012-11-07 22:30:47

disculpen de nuevo, quise decir:

que quiere decir cuando tengo... y el coment de arriba.

Steven R. Davidson
2012-11-07 23:34:35

Hola Rafael,

El operador << es a nivel de bits. Sirve para desplazar hacia la izquierda tantos lugares binarios (bits) del primero operando como se indique en el segundo operando. Por ejemplo, 123 en decimal es 01111011 en binario. Si desplazamos a la izquierda 4 lugares, acabaríamos con la secuencia binaria: 10110000, que digamos que ocupa 1 byte (8 bits); este número en decimal es: 176. Como puedes ver, el tipo de dato influye en el resultado, como en este caso se pierde información al ocupar solamente 8 bits. En tu caso, estás mudando 1 tantos lugares como indica 'n'; en binario, esto podría ser: 1, 10, 100, 1000, etc..

Se suele usar el operador << como una forma de potenciación binaria. Esto significa que por cada lugar que desplazamos el primer operando, estamos multiplicando por 2. Por ejemplo, 1 << 5 equivale a calcular 2 elevado a 5, que es 32. En tu caso, los posibles valores calculados pueden ser: 1, 2, 4, 8, 16, etc..

Hablamos de estos operadores a nivel de bits en el capítulo 18 ( http://c.conclase.net/curso/index.php?cap=018#inicio ).

Espero haber aclarado la duda.

Steven

Guillermo Rodriguez
2014-07-08 19:03:18

Excelente!! Muy claro, entendible, creo que deberían buscar apoyo para escribir un libro... He leído varios autores y se llegan a perder en la redacción; es decir, complican todo para poder explicar algo tan sencillo como usar los operadores.

Gracias, por sus esfuerzos!

Leonardo Gomez
2014-11-05 16:40:35

Hola, soy muy muy nuevo en esto de la programación y tengo una duda respecto al uso del operador '%' y es la siguiente: Cuando se usa (por ejemplo) 10%5 el resto dará como resultado 0 (cero), pero no sé como se lee la expresión x %=4 (en caso de tener que hacer el procedimiento con una variable) y seguido del signo '='. Si pudieran orientarme en esto se los agradezco. Muchas gracias

jugescool
2014-11-21 00:20:35

xfavor quisiera que me ayuden a desarrollar el algoritmo en pseudocodigo de numero primos aqui les dejo el codigo

¿Es N=1? -> N es primo, salir

¿Es N=2? -> N es primo, salir

Asignar a M el valor 2

mientras M <= raíz cuadrada(N) hacer:

¿Es N divisible entre M? -> N no es primo, salir

Si M=2 entondes Asignar a M el valor 3

Si M distinto de 2 entonces Asignar a M el valor M+2

Fin del mientras

N es primo ->salir

Diego
2014-12-25 16:58:28

Hola, quisiera saber si la versión PDF del curso c++ está

actualizado, me lo descargué y y encontré algunas diferencias. Me estoy perdiendo de algo al tomar el curso mediante la versión PDF?

Daniel
2016-02-08 21:27:03

Hola, verás. En el apartado de operadores aritméticos no entiendo el último ejemplo.

¿Me lo podeis explicar?