sábado, 13 de julio de 2013

Aritmética, Precedencia y Orden de Evaluación de Operadores en C#

Tabla de Contenido

1. Palabras Clave
2. Introducción
3. Operadores y Operaciones Aritméticas
3.1 Operadores aritméticos
3.2 Operaciones aritméticas
4. Expresiones Aritméticas en Forma de Línea Recta
5. Paréntesis para la Agrupación de Expresiones
6. Regla de Precedencia de Operadores
7. Expresiones Algebraicas y Expresiones C#
7.1 Orden de evaluación de expresiones
8. Conclusiones
9. Literatura y Enlaces

1. Palabras Clave

  • Asociatividad
  • Expresión algebraica
  • Operación aritmética
  • Operador

2. Introducción

El lenguaje de programación C# cuenta con diferentes tipos de funciones (métodos, eventos, indexers, finalizers), además de operadores aritméticos que también son considerados funciones. En esta oportunidad se estudiará las operaciones permitidas por este tipo de función: adición, substracción, multiplicación, división y residuo. Asímismo, se estudiará la forma en que se deben escribir las expresiones algebraicas que representan operaciones aritméticas usando la sintaxis del lenguaje de programación C#.

3. Operadores y Operaciones Aritméticas

3.1 Operadores aritméticos

Los operadores aritméticos +, -, *, / y % están disponibles para todos los tipos de datos numéricos, excepto para los de 8 y 16 bits: bytesbyteshort y ushort. La limitación se debe a que C# convierte de forma implícita los valores de las variables de estos cuatro tipos de datos numéricos a tipos de mayor capacidad (empezando por int (Int32)) (Albahari, 2012). Veámoslo con un ejemplo muy sencillo:

short x = 1, y = 1;
short z = x + y; // Error de compilación

En short z = x + y; se generá error  de compilación debido a que los valores de las variables x e y serán convertidos de manera implícita a enteros de mayor capacidad de bits,es decir a int. Este último sí posee la capacidad para usar los operadores aritméticos.

En la Tabla 1 (Albahari, 2012) se presenta los operadores junto con ejemplos de expresiones algebraicas en el lenguaje de programación C#.
Operadores aritméticos
Tabla 1. Operadores Aritméticos en C# (Albahari, 2012).
Los operadores de la Tabla 1 son todos operadores binarios, es decir que se requieren dos operandos (suma: sumandos, resta: minuendo, sustraendo, multiplicación: multiplicando, multiplicador; división: dividendo, divisor) para efectuar la operación correspondiente.

A diferencia de los operadores algebraicos, la aritmética en C# hace uso del símbolo asterisco * para representar la multiplicación: b * m. De manera análoga, el operador de residuo que, en álgebra se usa el término mod y en el lenguaje de programación C# el signo %.

3.2 Operaciones Aritméticas

3.2.1 Adición

El operador en C# para la suma es el mismo que el algebraico: +. En una expresión donde aparezcan varios operadores de suma la evaluación se realiza de izquierda a derecha.

Ejemplos:
  • 4 + 7
  • x + y

3.2.2 Substracción

En C# el operador utilizado para realizar la substracción de dos números (operación binaria) es el signo -. Al igual que la adición, su asociatividad es de izquierda a derecha.

Ejemplos:
  • 4 - 7
  • x - y

3.2.3 Multiplicación

El * (asterisco) es el operador utilizado para la multiplicación. Su asociatividad ocurre de izquierda a derecha.

Ejemplos:
  • 4 * 7
  • x * y

3.2.4 División

El operador para la división en C# es /. Su asociatividad es de izquierda a derecha. Hay que anotar que si los operadores son de tipo de dato entero, cualquier parte fraccionaria es descartada (i.e., truncada). No se realiza ningún proceso de redondeo. 7/4 es gual a 1, y la expresión 17/5 es igual a 3.

3.2.5 Residuo

El lenguaje de programación C# provee el operador de residuo, %, que produce el residuo después de llevarse a cabo la división de dos números. Por ejemplo la expresión 7%4 da como resultado 3, y 17 % 5 genera 2.

4. Expresiones Aritméticas en Forma en Línea

Las expresiones aritméticas en C# debe ser escritas en línea. Está forma facilita la entrada de los pasos que integran el algoritmo de los programas en el computador. Para particularizar, expresiones como “a dividido b” en C# deben ser escritas como a/b. Esto aplica para cualquier elemento definido por el programador: constante, variables, literales y cualquier otro operador que deba aparecer en una expresión.

Si quisiéramos entrar una expresión algebraica como la siguiente
Expresión algebraica
no será posible debido a la naturaleza lineal de los editores de código fuente.

5. Paréntesis para la Agrupación de Expresiones

Los paréntesis en C# son usados para agrupar términos de expresiones de la misma manera que expresiones algebraicas. Por ejemplo, para multiplicar a por la suma de b+c en C# escribiríamos:


a * ( b + c )

En el caso que una expresión contenga paréntesis anidados como en

( ( a + b ) * c )

la expresión en el paréntesis más interno,como en el ejemplo anterior: a+b, se evalúa primero.

6. Reglas de Precedencia de Operadores

En la Tabla 2 se puede apreciar las reglas básicas de precedencia de operadores.
Precedencia de operadores
Tabla 2. Precedencia de Operadores en C# (Albaharia, 2012).

7. Expresiones Algebraicas y Expresiones C#


Debido a que el compilador no es capaz de entender la forma tradicional de las expresiones algebraicas convencionales, el programador debe ser capaz de convertir una expresión algebraica a una expresión C#:



Ejemplos:

  • Álgebra:
    Expresión algebraica

    C#
    :
    Expresión aritmética en C#

    Para el caso anterior (expresión en
    C#) los paréntesis son necesarios, debido a que la división tiene mayor precedencia (o jerarquía) que la suma. Si se omitiera, las reglas de precedencia la expresión algebraica equivalente sería

    Expresión algebraica

7.1 Orden de evaluación de expresiones

El orden en que se evalúan las expresiones aritméticas en C# sigue las reglas de precedencia definidas en la Tabla 2. En el siguiente ejemplo se demuestra cómo se lleva a cabo la evaluación de una expresión
Expresión algebraica
La misma expresión pero en lenguaje C# y su orden de evaluación
Orden de evaluación de una expresión algebraica

8. Conclusiones

Se ha entendido la precedencia y asociatividad de los operadores en una expresión aritmética. Se han presentado, además, ejemplos donde se evalúa una expresión aritmética siguiendo las reglas de precedencia para comprender mejor el concepto y aplicarlo en los programas escritos por un programador.

9. Literatura y Enlaces

[1] 8- and 16-Bit Integrals - http://my.safaribooksonline.com/book/programming/csharp/9781449335441/numeric-types/id2621968
[2] C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.

V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.