Tutorial de programación en C para Linux Parte 11 – Operadores aritméticos, relacionales y lógicos
Hasta ahora, en esta serie de tutoriales de programación en C, hemos hablado de cosas básicas como las funciones, las matrices, las variables, etc. Siguiendo con la corriente, en este tutorial, hablaremos de otro de esos conceptos básicos: los operadores.
Como principiante en el lenguaje de programación C, te enfrentarás principalmente a tres tipos de operadores: aritméticos, relacionales y lógicos. Empecemos por los operadores aritméticos.
Hay esencialmente 5 tipos de operadores aritméticos en C: +, -, *, / y %. Mientras que +, – y / se explican por sí mismos, * se refiere a la multiplicación y % es el operador de módulo. Por si no lo sabes, el operador % te da un resto. Por ejemplo:
a % b
Aquí, el operador % se encarga de que obtengas el valor del resto cuando «a» se divide por «b». Esto significa que el resto puede ser cero en los casos en que «a» sea completamente divisible por «b». Aquí tienes un pequeño ejemplo que te dará más claridad sobre estos operadores:
#include <stdio.h>
int main()
{
int a = 10, b = 3, c =0;
c = a + b;
printf("%d\n", c);
c = a - b;
printf("%d\n", c);
c = a*b;
printf("%d\n", c);
c = a/b;
printf("%d\n", c);
c = a%b;
printf("%d\n", c);
return 0;
}
A continuación se muestra la salida de este programa:
13
7
30
3
1
Cabe mencionar aquí que cuando se trata de flotantes y dobles, no debes utilizar el operador %. Además, los operadores + y – que hemos utilizado aquí son operadores binarios, es decir, requieren dos operandos (por ejemplo, «a» y «b» en nuestro caso). También hay operadores unarios + y -, que funcionan con un solo operando.
Aquí tienes un ejemplo del operador unario – en acción:
#include <stdio.h>
int main()
{
int a = 10, b = 3, c =0;
c = -a;
printf("c = %d", c);
}
Este es el resultado:
c = -10
Entre todos los operadores comentados hasta ahora, en cuanto a la precedencia, los unarios + y – comparten el primer puesto, seguidos de *, / y %, que a su vez son seguidos por los binarios + y -.
Ten en cuenta que también hay otros operadores unarios, algunos de los cuales ya hemos tratado indirectamente en nuestros tutoriales anteriores. Esta es la lista: ++, –, !, &, y sizeof.
Ya hemos hablado de los operadores de incremento y decremento ++ y — (en sus formas prefija y postfija). ! es un operador NO que niega cualquier cosa sobre la que se aplique. Por ejemplo, si el resultado de una condición es verdadero, al aplicar ! se convertirá en falso, y viceversa.
A continuación, & se utiliza para obtener la dirección de una variable (como ya se ha visto en el caso de los argumentos de la función scanf()), mientras que el operador sizeof te da el tamaño del operando que se le ha pasado. El siguiente fragmento de código debería darte una mejor idea sobre estos operadores:
#include <stdio.h>
int main()
{
int a = 10, b = 3, c =0, d =1, e=0, f=9;
printf("a = 10 and a++ = %d\n", a++);
printf("b = 3 and ++b = %d\n", ++b);
printf("c = 0 and c-- = %d\n", c--);
printf("d = 1 and --d = %d\n", --d);
if(!e)
{
printf("\n e is zero or FALSE and its address is: %u\n", &e);
printf("\n sizeof 'f' is: %u\n", sizeof(f));
}
return 0;
}
Y este es el resultado:
a = 10 and a++ = 10
b = 3 and ++b = 4
c = 0 and c-- = 0
d = 1 and --d = 0
e is zero or FALSE and its address is: 856178696
sizeof 'f' is: 4
Sigamos, echemos un vistazo rápido a los operadores relacionales y lógicos. Los siguientes son operadores relacionales:
> >= < <= == !=
A continuación te mostramos cómo se pueden utilizar:
a > b
a >= b
a < b
a <= b
a == b
a != b
Por orden de aparición, estos operadores comprueban si «a» es mayor, mayor o igual que, menor que, menor o igual que, igual y no igual que «b». Los cuatro primeros operadores tienen la misma precedencia, que es mayor que los dos últimos. Ten en cuenta que los dos últimos operadores también se llaman operadores de igualdad.
Y por último, llegamos a los operadores lógicos. Hay esencialmente dos: && y ||. Estos dos operadores se utilizan sobre todo para evaluar condiciones o expresiones. Por ejemplo:
if (cond1 && cond2)
{
}
if (expr1 && expr2)
{
}
if (cond1 || cond2)
{
}
if (expr1 || expr2)
{
}
En el caso de las dos primeras sentencias if, la ejecución sólo entrará en el bloque si ambas condiciones son verdaderas. Mientras que en el caso de las dos últimas sentencias if, la ejecución entrará en el bloque si alguna de las condiciones de la expresión es verdadera.
Ten en cuenta que los operadores relacionales tienen menor precedencia que los operadores aritméticos, y la de los operadores lógicos es menor que la de los operadores relacionales y de igualdad. Entre ellos, && tiene mayor precedencia que ||.
Conclusión
En este tutorial hemos tratado los fundamentos de los operadores, su funcionamiento y su precedencia. Te sugerimos que crees algunos programas en C de ejemplo para comprobar los conceptos aquí expuestos. En caso de cualquier duda o consulta, háznoslo saber en los comentarios de abajo.