Hoy vamos a ver los operadores que se utilizan en C++, en principio son 4: Asignacion, Matematicos, Relacionales y Logicos. Estos te permiten formar las expresiones, intrucciones y las condiciones para que puedan ser evaluadas por ejemplo por el comando IF o WHILE. No son complejas pero tienen su grado de dificultad pero una vez que se aprendan son los grandes aliados para que los programas funcionen por si solos, como vimos en el post anterior con el comando que decidia en base a los valores ingresados. Comencemos con los operadores:

Asignación

El de asignacion es el operador mas basico ya que unicamente lo que hace es asignar al operando de la izquierda el valor de la derecha, un par de ejemplos:

x=35; A x se le asigna el valor de 35.

x=a+b; A x se le asigna el valor de a+b.

Matematicos

Los  5 operadores matematicos basicos que se utilizan son: suma (+), resta (-), multiplicacion (*), division (/) y residuo (%).

Las operaciones son iguales que en la vida cotidiana, la suma es suma, la multiplicacion idem, la resta se puede complicar como veremos un caso mas adelante, la division tambien tiene algunas consecuencias y el residuo justamente para averiguar lo que queda de la division. Veamos un caso de que tengamos que hacer una division de 21/4, esto nos da como resultado 5 pero nos queda afuera el residuo que seria 1, para averiguar este residual se deberia hacer 21%4, que en este caso nos daria 1. Veamos algunos ejemplos de distintos tipos de operadores, en el primer caso veamos una resta con valores sin signos y un resultado negativo que nos daria un desborde, en el segundo caso veremos un caso de division:

oper00.cpp

# include <iostream>

using namespace std;

int main()
{
        unsigned int diferencia;
        unsigned int numGrande=100;
        unsigned int numChico=50;
        diferencia=numGrande - numChico;
        cout << "La diferencia es: " << diferencia << endl;
        diferencia=numChico - numGrande;
        cout << "Ahora la diferencia es: " << diferencia << endl;
        return 0;
}

En este codigo haremos una simple resta entre dos numeros, si lo compilamos y ejecutamos veremos esta salida:

tinchicus@dbn001vrt:~/programacion/c++$ ./program/oper00
La diferencia es: 50
Ahora la diferencia es: 4294967246
tinchicus@dbn001vrt:~/programacion/c++$

El desbordamiento se produce por el hecho de utilizar una variable sin signo y el programa al no poder representarlo te mostrara el valor almacenado en memoria, pasemos al segundo ejemplo:

oper01.cpp

# include <iostream>

using namespace std;

void intDiv(int x, int y)

{
        int z=x/y;
        cout << "Z: " << z << endl;
}

void floatDiv(int x, int y)
{
        float a=(float)x;
        float b=static_cast<float>(y);
        float c=a/b;
        cout << "C: " << c << endl;
}

int main()
{
        int x, y;
        cout << "Ingresa el valor de X: ";
        cin >> x;
        cout << "Ingresa el valor de Y: ";
        cin >> y;
        intDiv(x,y);
        floatDiv(x,y);
        return 0;
}

En este ejemplo tendremos dos metodos, uno para hacer una division de tipo entera (intDiv) y otra de tipo flotante (floatDiv), observen como al definir a la variable a, se utiliza la forma antigua de asignarle un valor es decir aclarar entre parentesis el tipo de variable y luego la variable con el valor almacenado, el metodo mas recomendado es el de la variable b donde por medio de static_cast<> y ahi definimos el tipo de variable que va a ser el valor asignado por otra variable con un valor, los dos metodos son validos pero es mas recomendable el segundo, en el cuerpo del main() tendremos los metodos cin para poder ingresar los valores que seran enviados a las funciones antes creadas y asi obtener los resutados, si compilamos y probamos obtendremos una salida como esta:

tinchicus@dbn001vrt:~/programacion/c++$ ./program/oper01
Ingresa el valor de X: 20
Ingresa el valor de Y: 3
Z: 6
C: 6.66667
tinchicus@dbn001vrt:~/programacion/c++$

Como pueden ver del primer metodo solamente veremos el valor entero de la division, en el segundo caso veremos el valor con coma por ser flotante.
Ahora veamos un caso de como se mezclan los operadores de asignacion y matematicos para facilitarnos la escritura de los codigos fuente, veamos un ejemplo y como lo podemos reducir a su minima expresion:

int miEdad=5;
int temp;
temp=miEdad + 2;
miEdad=temp;

Del ejemplo anterior se podria reducir a la siguiente expresion

miEdad = miEdad + 2;

Eliminando la linea de temp, en este caso innecesaria, ya que la expresion anterior es interpretada como al valor de miEdad le sumo 2 y se lo asigno a miEdad. Ahora veamos como se podria volver a reducir

miEdad += 2;

El programa lo interpretaria de la misma forma que se comento antes. Otra forma de incremento o decremento que se puede utilizar es a traves del ++ o del –. Por ejemplo, nosotros en una instruccion podriamos hacer lo siguiente:

c=c+1;
c++;

Estas 2 instrucciones hacen exactamente lo mismo, a C le agregan 1. Se puede utilizar lo mismo para restar:

c=c-1;
c--;

Estos valores de incremento o decremento tambien pueden ser prefijos o posfijos, el prefijo es cuando el operador va por delante de la expresion (++c) y posfijo cuando va despues (c++) el resultado es el mismo, va a incrementar el numero en caso de programas simples no influye mucho pero en el caso de programas mas complejos donde el incremento puede ser critico si puede ser determinante. En general, por experiencia propia, se utiliza mas el posfijo pero en algunas ocasiones es mas practico el prefijo.
Los operadores matematicos tambien tienen una precedencia, por ejemplo los multiplicadores estan por arriba de la suma o de la resta. En el caso de tener que esquivar la precedencia se puede utilizar parentesis anidados, veamos un ejemplo de ambos:

oper02.cpp

# include <iostream>

using namespace std;

int main()
{
        int z,y;
        z=30 - 2 * 5 + 10;
        y=((30-2) * (5+10));
        cout << "Z: " << z << endl;
        cout << "Y: " << y << endl;
        return 0;
}

Si lo compilamos y probamos obtendremos la siguiente salida:

tinchicus@dbn001vrt:~/programacion/c++$ ./program/oper02
Z: 30
Y: 420
tinchicus@dbn001vrt:~/programacion/c++$

Si ven en el primer caso primero resuelve la multiplicacion y luego ejecuta el resto de las operaciones, en el segundo caso al estar anidadas primero resuelve los parentesis y luego lo multiplica, por este motiva da dos resultados distintos y por ende deben recordar que C siempre resuelve primero las multiplicaciones o divisiones y luego las sumas o restas salvo que esten anidadas entre parentesis donde primero resolvera los parentesis y ejecutara la operacion entre ellas.

Relacionales

Los operadores relacionales son los que se utilizan para comparar 2 valores entre si y determinar si uno es mayor, menor, igual que el otro. Esto tambien se utiliza mayoritariamente para los condicionales, o ciclos, el valor que devuelve es un booleano, o sea verdadero o falso, si uno evalua si es mayor que el otro devolvera verdadero (true) si la relacion se cumple y de no cumplirse devolveria un falso (false), veamos una tabla para que se entiendan los mismos:

Nombre Operador Ejemplo Valor
igual a == 50==50   Verdadero
Diferente != 50!=50 Falso
Mayor que > 100>50 Verdadero
Mayor o igual >= 100>=100 Verdadero
Menor que < 50<100 Verdadero
Menor o igual <= 50<=100 Verdadero

Logicos

Las expresiones logicas se utilizan para efectuar una comparacion entre varios operadores relacionales, por ejemplo una condicion donde 2 expresiones tienen que ser mayor que un numero y esa 2 expresiones a su vez menor que otro para que se cumpla. Esto justamente se logra con los operadores logicos, los operadores son 3: AND (&&), OR (||), NOT (!). Basicamente sin ahondar en muchos detalles, la logica AND nos devuelve un valor verdadero (TRUE) si las 2 condiciones se cumplen de lo contrario toma estado falso (FALSE), esto es bueno para cuando se necesita una condicion donde todos los valores deberian ser verdaderos, pasemos al caso de OR, aca lo utilizaremos para los casos de que en la condicion necesita que una sola de las 2 expresiones se cumpla para que sea verdadera y finalmente la NOT es para invertir el estado de la expresion que tiene detras, veamos un par de ejemplos:

(x>3 && x<5) .... esta operacion seria verdadera en el caso de que x fuese igual a 4.

(x==3 || x==4) .... esta operacion seria verdadera si x valiera unicamente 3 o 4.

!(x<3) .... esta operacion es verdadera si x no es menor que 3, esto es debido al operador NOT que tiene adelante invierte el sentido de la condicion.

Si revisan el ejemplo del post anterior (el de los bloques) se encontraran un ejemplo de condicionales IF con algunos ejemplos de operadores, les dejo un ultimo ejemplo para que se entienda:

oper03.cpp

# include <iostream>

using namespace std;

int main()
{
        int x,y,z;
        cout << "Ingresa un valor de X(0-6): ";
        cin >> x;
        cout << "Ingresa un valor de Y(0-6): ";
        cin >> y;
        if (x>6 || y>6)
        {
        cout << "Los valores de X e Y tienen que ser entre 0 y 6 \n";
        }
        else
        {
        if(x<y)
                z=x+y;
        if(x>y)
                z=x-y;
        cout << "El resultado final de Z es: " << z << endl;
        }
        return 0;
}

El programa es simple, nos solicita dos valores entre 0 y 6, si alguno de los valores es mayor a 6 nos dara un mensaje de error y en caso contrario ejecutara una operacion dependiendo cual es mayor que el otro y nos mostrara el resultado en pantalla, si lo compilamos y ejecutamos tendremos una salida como esta:

tinchicus@dbn001vrt:~/programacion/c++$ ./program/oper03
Ingresa un valor de X(0-6): 7
Ingresa un valor de Y(0-6): 2
Los valores de X e Y tienen que ser entre 0 y 6
tinchicus@dbn001vrt:~/programacion/c++$ ./program/oper03
Ingresa un valor de X(0-6): 2
Ingresa un valor de Y(0-6): 3
El resultado final de Z es: 5
tinchicus@dbn001vrt:~/programacion/c++$ ./program/oper03
Ingresa un valor de X(0-6): 3
Ingresa un valor de Y(0-6): 2
El resultado final de Z es: 1
tinchicus@dbn001vrt:~/programacion/c++$

Como pueden ver las tres condiciones se cumplen, es decir si alguno de los valores esta fuera del rango (0-6) muestra el mensaje, si es X es menor a Y procede a sumarlo y si X es mayor a Y procede a restarlo:
En resumen, hoy hemos visto los operadores basicos disponibles en C, los operadores de asignacion, los matematicos, los relacionales y los logicos, hemos visto como trabajan y como operan, espero les haya sido util sigueme en Twitter, Facebook o Google+ para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios