Qué son los operadores, qué son los operandos y cómo funcionan en los lenguajes de programación. Veremos los tipos de operadores y las prioridades de ejecución cuando tenemos varios en una misma expresión.
En este artículo vamos a introducir uno de los temas principales de los lenguajes de programación, como son los operadores y los operandos, que nos sirven para realizar todo tipo de expresiones en las que trabajamos con los datos, con distintos tipos de operaciones.
Abordaremos este tema desde un punto de vista genérico, sin tratar un lenguaje de programación en particular, explicando cuáles son los operadores más habituales en los lenguajes de programación. Sin embargo, debes saber que cada lenguaje puede aplicar unos símbolos determinados a los operadores, que pueden cambiar entre unos y otros. Existe un patrón bien definido en la mayoría de los casos, como los símbolos de las matemáticas, pero en general debes saber que pueden cambiar de lenguaje a lenguaje.
Qué son operadores
Antes de comenzar a ver cuáles son los operadores conviene explicar qué son, de un modo general, aunque creo que la mayoría de las personas lo tienen en mente del propio estudio de materias como las matemáticas.
Los operadores son elementos que relacionan de forma diferente, los valores con los que trabajamos en los lenguajes de programación. En los lenguajes de programación usamos los operadores para manipular los valores y transformarlos, con el objetivo de realizar los objetivos de los programas.
Qué son los operandos
Los operandos son los valores que se utilizan para alimentar los operadores. Por ejemplo, en el operador suma necesitamos dos operandos para sumar ambos valores.
Los operandos pueden venir almacenados en variables o constantes, pero también pueden ser simplemente valores que están escritos de manera literal en el código del programa.
Tipos de operadores
A continuación vamos a relatar los tipos de operadores más comunes que encontraremos en la mayoría de los lenguajes de programación.
La mayoría de los lenguajes tienen otros tipos de operadores además de estos. De momento y por simplicidad nos vamos a ceñir en este artículo a los operadores aritméticos, relacionales y los operadores lógicos, que son los más habituales a la hora de programar.
Operadores Aritméticos
Los operadores aritméticos permiten la realización de operaciones matemáticas con los valores literales, con las variables o con las constantes.
Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.
Ahora presentamos una lista de operadores aritméticos, que generalmente se usan con los mismos símbolos en todos los lenguajes, ya que nos vienen heredados de las matemáticas.
- + Suma
- - Resta
- * Multiplicación
- / División
- mod Modulo (residuo o resto de la división entera)
- ^ Elevar a una potencia
Muchos lenguajes como C, Java, Javascript, C# y otros usan el símbolo procentaje (%) para el operador módulo, o resto de la división entera. Muchos lenguajes usan el operador con dos asteriscos (**) para elevar a potencias.
Ejemplos de uso de operadores aritméticos:
A continuación puedes encontrar algunas expresiones con operadores aritméticos y los resultados que obtendrían.
Expresión: 7 / 2
Resultado: 3.5
Expresión: 12 mod 7
Resultado: 5
Expresión: 4 + 2 * 5
Resultado: 14
Prioridad de los Operadores Aritméticos
Cuando encontramos varios operadores en una misma expresión los lenguajes de programación tendrán que evaluarlos en un orden determinado. Ese orden lo conocemos como prioridad o precendencia de operadores.
Cuando se trata de operadores aritméticos es muy fácil imaginarse la prioridad de unos respecto a otros, dado que funcionan igual que en las matemáticas. Por ejemplo, siempre se evaluará una multiplicación antes que una suma.
Sin embargo, no siempre es tan fácil deducir cómo se va a resolver la asociatividad de los operadores, por lo que hay que aprenderse unas reglas de precedencia que vamos a resumir en este punto.
Dentro de una misma expresión los operadores se evalúan en el siguiente orden:
- ^ Exponenciación (en los lenguajes en los que exista este operador)
- *, /, mod (Multiplicación, división, modulo)
- +, - (Suma y resta)
En el caso en el que en una misma expresión se asocien operadores con igual nivel de prioridad, éstos se evalúan de izquierda a derecha.
Así funciona en la mayoría de los lenguajes de programación, pero tendrías que examinar cómo lo hace en el tuyo o consultar la documentación.
Cómo romper las reglas de precedencia de operadores con los paréntesis
En el caso que quieras romper las reglas de precedencia de los operadores puedes usar los paréntesis. Funcionan con cualquier tipo de operadores y se comportan igual que en las matemáticas. Puedes definir mediante los paréntesis qué operadores se van a relacionar con qué operandos, independientemente de las reglas mencionadas anteriormente.
- Todas las expresiones entre paréntesis se evalúan primero
- Las expresiones con paréntesis anidados se evalúan de dentro a fuera
- El paréntesis más interno se evalúa primero.
Ahora veamos ejemplos de asociatividad de operadores en sentencias más complejas, usando paréntesis para marcar cómo queremos que se realice la precendencia:
4 + 2 * 5 = 14
23 * 2 / 5 = 9.2
3 + 5 * (10 - (2 + 4)) = 23
2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98
Operadores alfanuméricos
Cuando trabajamos con cadenas de caracteres podemos también realizar operaciones, aunque realmente sería solo una en la mayoría de los lenguajes que llamamos "concatenación".
Principalmente utilizamos el símbolo "+" para concatenar cadenas, que consiste en colocar una cadena a continuación de otra.
Luego dependiendo de el lenguaje puede funcionar o no el símbolo "-" para concatenar cadenas eliminando los espacios en blanco.
Ejemplo de concatenación de cadenas
a = "hola"
b = "mundo"
c = a + b
Después del anterior código c valdrá "holamundo".
Fíjate que no hay un espacio entre medias porque el ordenador no sabe que son dos palabras. Simplemente le estás pidiendo que las junte y como resultado tienes las dos cadenas una detrás de la otra. Si hubieses querido juntarlas podrías haber hecho algo como esto: c = a + " " + b
Operadores Relacionales
Se utilizan para establecer una relación entre dos valores. Luego compara estos valores entre si y esta comparación produce un resultado de certeza o falsedad (verdadero o falso).
Encontrarás que muchas veces nos referimos a "verdadero" o "falso" como "true" o "false", que es la traducción en inglés. De hecho true y false forman el conjunto de valores que definen a uno de los tipos habituales de la programación, el tipo boleano.
Los operadores relacionales comparan generalmente valores del mismo tipo (numéricos con numéricos o cadenas con cadenas). Pero también hay lenguajes de programación, como los que tienen tipado dinámico (Javascript, PHP y otros) donde se permite comparar valores de tipos distintos.
Todos los operadores relacionales tienen el mismo nivel de prioridad en su evaluación. En general, los operadores relacionales tienen menor prioridad que los aritméticos.
Tipos de operadores Relacionales
- > Mayor que
- < Menor que
- >= Mayor o igual que
- <= Menor o igual que
- < > Diferente
- == Igual
El símbolo "==" nos compara dos valores. No lo debes confundir con el signo "=" que se usa habitualmente para asignar un valor en una variable.
El símbolo "<>" de distinto, en muchos lenguajes de programación se expresa como "!=". Lo verás así en lenguajes como C o Java, Javascript y muchos otros. Los demás signos son bastante estándar, como "<", ">", "<>", "<=", ">=", que se usan tal cual en la mayoría de los lenguajes.
Ahora vamos a ver varios ejemplos de uso de operadores relacionales. Para facilitarnos las cosas vamos a suponer que tenemos tres variables:
a = 10
b = 20
c = 30
Teniendo en cuenta los valores de las variables anteriores, veamos estos ejemplos y los resultados que se producirían al combinar varios operadores.
a + b > c Falso
a - b < c Verdadero
a - b == c Falso
a * b < > c Verdadero
Para entender los ejemplos anteriores recuerda que los operadores aritméticos se resolverán antes que los operadores relacionales, por lo que primero tienes que resolver las operaciones matemáticas para luego comprobar cómo se evaluarían los operadores relacionales.
Como hemos señalado, en muchos lenguajes de programación, generalmente los de tipado fuerte, no se pueden comparar valores de tipos distintos, por lo que los siguientes ejemplos no serían válidos:
a < b < c
10 < 20 < 30
T > 5 < 30
Operadores Lógicos
Estos operadores se utilizan para establecer relaciones entre valores lógicos. Los valores lógicos son los valores boleanos:
- True (verdadero)
- False (falso)
Además, dado que los operadores relacionales tienen como resultado un operador lógico, que se deduce mediante la comparación de los operandos, los operadores lógicos pueden tener como operandos el resultado de una expresión relacional.
Los tipos de operadores Lógicos también pueden cambiar entre lenguajes de programación, pero generalmente encontraremos los siguientes:
- And (operación Y)
- Or (operación O)
- Not (Negación)
Como operadores lógicos nos encontramos en muchos lenguajes con el símbolo "!" para la negación. El símbolo "&&" para la operación de "and" y !||" para el "or".
Tablas de ejemplo de uso de operadores lógicos
Ahora vamos a ver ejemplos de uso de operadores lógicos. Los vamos a representar por medio de tablas con las operaciones posibles y los resultados que tendrían las distintas combinaciones de valores.
Para los siguientes ejemplos, con la intención de ser más escuetos, T significa verdadero y F falso.
Operador Not
La operación NOT realiza el cambio al valor contrario. Si era verdadero pasa a falso y viceversa.
NOT T = F
NOT F = T
Operador And
La operación AND da como resultado verdadero cuando ambos operadores relacionados son verdadero. Si uno de los dos es falso, o ambos son falsos, entonces el resultado es falso.
T AND T = T
T AND F = F
F AND T = F
F AND F = F
Operador Or Operador Or
La operación OR da verdadero cuando al menos uno de los dos operadores es verdadero. Si ambos operadores son falsos, entonces da falso.
T OR T = T
T OR F = T
F OR T = T
F OR F = F
Prioridad de los Operadores Lógicos
El orden de precedencia de los operadores lógicos entre ellos es el siguiente, de más precedente a menos:
- Not
- And
- Or
Prioridad de los Operadores en General
Como has visto, existen diversos tipos de operadores y cada uno de ellos tiene su precedencia o prioridad, que define cómo se van a asociar los operandos. Los lenguajes soportan expresiones en los que se relacionan diversos tipos de operadores, en cuyo caso tendremos que conocer la tabla de precendecia de operadores del lenguaje en sí.
Ten en cuenta que cada lenguaje puede tener variaciones en sus tablas de precedencia, que cambien la asociatividad de los operadores con sus operandos. No obstante, todos siguen en la mayoría de los casos esquemas similares.
A continuación te damos una tabla de precedencia clásica en la que aparecen distitos tipos de operadores, pero sería bueno que consultases la del lenguaje de programación con el que vas a trabajar.
- ( )
- ^
- *, /, Mod, Not
- +, -, And
- >, <, > =, < =, < >, =, Or
Ejemplo de operación compleja con su precedencia
Para el siguiente ejemplo, tenemos las suguientes variables: a = 10, b = 12, c = 13, d = 10.
Otros ejemplos de expresiones con uso de operadores
Para completar, vamos a ver otros ejemplos de expresiones con operadores de diversa índole.
Aritméticos
a = 3
b = 2
x = a ** 2 donde x valdría 9
x = a / 2 donde x valdría 1.5
x = a * 2 donde x valdría 6
x = a % b donde x valdría 1
Alfanuméricos
A = "Hola" B = " Que tal" X = A + B
Al terminar de ejecutarse ese código X valdría "Hola Que tal".
Relacionales
Ahora te ponemos un poco de pseudocódigo para los siguientes ejemplos de operadores.
Si x == a entonces
Instrucciones
Sino
Instrucciones
Fin si
Lógicos
Si !a entonces
La variable esta vacía
Fin si
Si a == 3 and b == 3 entonces
a y b son iguales y su valor es 3
Fin si
Wilder Urbaez