Chunche95

Si analizamos la sentencia siguiente:

                                    
                    var1= var2+var3;
                                    
                                
Estamos diciéndole al programa, por medio del operador +, que compute la suma del valor de dos variables, y una vez realizado ésto asigne el resultado a otra variable var1.
Esta última operación (asignación) se indica mediante otro operador, el signo "=".
El lenguaje C tiene una amplia variedad de operadores, y todos ellos caen dentro de 6 categorías:
  • Aritméticos
  • Relacionales
  • Lógicos
  • Incremento
  • Decremento
  • Manejo de bits y asignación
Todos ellos se irán describiendo en los párrafos siguientes.

Operadores Aritméticos

Tal como era de esperarse los operadores aritméticos, mostrados en la tabla 4, comprenden las cuatro operaciones básicas: suma,resta,multiplicación y división, con un agregado, el módulo.

Símbolo Descripción Ejemplo Orden de evaluación
+ Suma a+b 3
- Resta a-b 3
* Multiplicación a*b 2
/ División a/b 2
% Módulo a%b 2
- Signo -a 2
El operador módulo se usa para calcular el resto del cociente entre dos números enteros y NO puede ser aplicado a varaibles del tipo float o double.
Si bien la precedencia (orden en el que son ejecutados los operadores) se analizarán más adelante, en este capítulo, podemos adelantar algo sobre el orden en el que se realizan las operaciones aritméticas.
En la Tabla 4, la última columna, se da el orden de evaluación de un operador dado. Cuanto más bajo sea dicho número mayor será su prioridad de ejecución. Si en una operación existen varios operadores, primero se evaluarán los de multiplicación, división y módulo y luego los de suma y resta.
La precedencia de los tres primeros es la misma, por lo que si hay varios de ellos, se comenzará a evaluar a aquel que quede más a la izquieda. Lo mismo ocurre con la suma y la resta.

Para evitar errores en los cálculos se pueden usar paréntesis, sin limitación de anidamieno, los que fuerzan a realizar primero las operaciones incluidas en ellos. Los paréntesis no disminuyen la velocidad a la que se ejecuta el programa sino que tan sólo obligan al compilador a realizar las operaciones en un orden dado, por lo que es una buena costumbre utilizarlos ampliamente.
Los paréntesis tienen un orden de precendecia 0, es decir, que antes que nada se evalúa lo que ellos encierran. Se puede observar que no existen operadores de potenciación, radicación, logaritmicos, etc, ya que en C todas estas operaciones ( y muchas otras) se realizan por medio de llamadas a Funciones.
El último de los operadores aritméticos es el de signo. No debe confundirse con el de resta, ya que este es un operador unitario que opera sobre una única variable cambiando el signo de su contenido numérico. Obviamente no existe el operador '+' unitario, ya que su operación será dejar el signo de la variable, lo que se consigue simplemente por omisión del signo.

Operadores relacionales.

Todas las operaciones relacionales dan sólo dos posibles resultados: VERDADERO o FALSO. En el lenguaje C, Falso queda representado por un valor entero nulo (cero) y Verdadero por cualquier número distinto de cero. En la tabla 5 se encuentra la descripción de los mismos.

SIMBOLO DESCRIPCIÓN EJEMPLO ORDEN DE EVALUACIÓN
< menor que (a < b) 5
> mayor que (a > b) 5
menor o igual que (a ≤ b) 5
mayor o igual que (a ≥ b) 5
== igual que (a == b) 6
!= distinto de (a != b) 6
Uno de los errores más comúnes es confundir el operador relacional '==' con el de asignación '='. La expresión 'a=b' copia el valor de b en a, mientras que 'a==b' retorna cero, si 'a' es distinto de 'b' o un número distinto de cero si son iguales.
Los operadores relacionales tiene menor precedencia que los aritméticos, de forma que:
                                    
                    a < b + c 
                                    
                                
Se interpreta como:
                                    
                    a < ( b + c )
                                    
                                
Pero es recomendable el uso de los paréntesis a fin de aumentar la legitibilidad del texto.
Cuando se comparan dos variables tipo char el resultado de la operación dependerá de la comparación de los valores ASCII de los caracteres contenidos en ellas. Así el carácter 'a' (ASCII 97) será mayor que el A (ASCII 65) o que el 9 (ASCII 57).

Operadores lógicos.

Hay tres operadores que se usan para la conectividad lógica, descritas en la tabla 6:

SÍMBOLO DESCRIPCIÓN EJEMLO ORDEN DE EVALUACIÓN
&& Y (AND) (a < b) && (c > d) 10
|| O (OR) (a < b) || (c > d) 11
! NEGACIÓN (NOT) !(a < b) 1
Los resultados de las operaciones lógicas siempre adoptan los valores CIERTO o FALSO. br La evaluación de las operaciones lógicas se realiza de izquierda a derecha y se interrumpe cuando se ha asegurado el resultado.
El operador NEGACIÓN invierte el sentido lógico de las operaciones, así será:
                                
            !( a > b ) equivale a ( a < b )
            !( a == b ) equivale a  ( a != b )
            etc.
                                
                            
En algunas operaciones suele usárse de una manera que se presta a confusión, por ejemplo:
(!i)
donde i es un entero. Esto dará un resultado CIERTO si 'i' tiene un valor 0 y un resultado FALSO si 'i' es distinto de cero.

Operadores de incremento y decremento.

Los operadores de incremento y decremento son sólo dos y están descritos en la tabla 7:

SÍMBOLO DESCRIPCIÓN EJMEPLO ORDEN DE EVALUACIÓN
++ Incremento ++i o i++ 1
-- Decremento --i o i-- 1
Para visualizar rápidamente la función de los operadores antedichos, digamos que las sentencias:
                                    
                    a = a+1;
                    a++;
                                    
                                
Tiene una acción idéntica, de la misma forma que:
                                    
                    a = a-1;
                    a--;
                                    
                                
Son absolutamente equivalentes, en la maoria de los casos la ubicación de los operadores de incremento o decremento indica CUANDO se realiza la operación. Ejemplo:
                                    
                    int = 1, j,k;
                    j = i++;
                    k = ++i;
                                    
                                
En estos casos 'j' es igualado al valor de 'i' y posteriormente a la asignación de i es incrementado por lo que j será igual a 1 e i igual a 2.
Luego de ejecutada la sentencia. En la siguiente instrucción i se incrementa antes de efectuarse la asignación tomando el valor de 3, él que luego es copiado en k.

Operaciones de asignación.

En principio puede resultar algo con poca utilidad , gastar papel en describir al operador igual a (=), sin embargo, es necesario remarcar ciertas características del mismo.
Anteriormente, definimos a una asignación como la copia del resultado de una expresión (rvalue) sobre otra (lvalue), esto implica que dicho lvalue debe tener lugar (es decir poseer una posición de memoria) para alojar dicho valor. Es por tanto válido escribir:

                                    
                    a = 17;
                                    
                    pero NO:
                                    
                    17 = a ; 
                                    
                                
Ya que la constante numérica 17 no posee una ubicación de memoria donde alojar al valor de 'a'.
Aunque parezca un poco extraño al principio las asignaciones, al igual que las otras operaciones, dan un resultado qu puede asignarse a su vez a otra expresión. De la misma forma ( a + b ) es evaluada y su resultado puede copiarlo en otra variable: c = (a + b); una asignación (a=b) da como resultado el valor de b, por lo que es lícito escribir:
                                    
                    c = ( a = b )
                                    
                                
Debido a que las asignaciones se evalúan de derecha a izquierda, los paréntesis son superfluos, y podrá escribirse entonces:
                                    
                    c=a=b=17;
                                    
                                
Con lo que las tres variables resultarán iguales al valor de la constante.
El hecho de que estas operaciones se realicen de derecha a izquierda también permite realizar instrucciones del tipo:
                                    
                    a+=17;
                    a=a+17;                                        
                                    
                                
Significando esto que al valor que tenia anteriormente 'a', se le suma la constante y luego se copia el resultado en la variable.
Como este último tipo de operaciones es por demás común, existe en C un pseudocódigo, con el fin de abreviarlas.
Así una operación aritmética o de bit cualquiera ( simboliza por OP).
                                    
                    a = (a) OP (b); 
                                    
                                
puede escribirse en forma abreviada como: a OP= b;
Por ejemplo:
                                    
            a += b; → a = a + b;
            a -= b; → a = a - b;
            a *= b; → a = a * b;
            a /= b; → a = a / b;
            a %= b; → a = a % b;
                                    
                                
Los operadores de asignación están resumidos en la tabla 8.
SÍMBOLO DESCRIPCIÓN EJEMPLO ORDEN DE EVALUACIÓN
= igual a a = b 13
op= pseudocódigo a+=b 13
=?: asignación condicional a = (c > b)?d:e 12
Vemos de la tabla anterior que aparece otro operador denominado asignación condicional. El significado del mismo es el siguiente:
rvalue 1 ó 2. Si aquella es cierta sera lvalue=rvalue 1 y si diera falso, lvalue= rvalue 2.
Por ejemplo, si quisiéramos asignar a 'c' el menor de los valores a o b, bastará con escribir:
c = ( a < b )?a:b;

Operadores de manejo de bits.

Estos operadores muestran una de las armas más potentes del lengiaje C, la de poder manipular internamente, es decir, bit a bit, las variables.
Debemos anticipar que estos operadores sólo se aplican a variables de tipo char, short, int y long. No pueden ser usados con float o double.
Sabemos que los computadores guardan los datos organizados en forma digital, en bytesm formado por números binarios de 8 bits, mientras que los short e int se forman con dos bytes ( 16 bits) y los long por cuatro bytes ( 32 bits). Para el manejo de los bits tenemos:

SÍMBOLO DESCRIPCIÓN EJEMPLO ORDEN DE EVALUACIÓN
& Y o AND (bit a bit) a & b 7
| O u OR inclusiva a|b 9
^ O u OR exclusiva a^b 8
<< Rotación a la izquierda. a<<b 4
>> Rotación a la derecha a>>b 4
~ Complemento a uno ~a 1