Introducción a Patrones de Diseño en C++ con Qt4/1.14.2 Aritmética
Aritmética
editarCada lenguaje de programación debe proveer facilidades para realizar aritmética básica. Para cada uno de estos tipos numéricos, C++ proporciona estos cuatro operadores aritméticos básicos:
- adición (+)
- subtracción (-)
- multiplicación (*)
- división (/)
Estos simbolos de operadores son usados para formar expresiones en la sintaxis infis estándar que aprendimos en las clases de matemáticas.
C++ proporciona operadores de atajo que combinan cada uno de los operadores básicos con el operador de asignación mismo (=), por ejemplo, es posible escribir:
x += y;
en lugar de;
x = x + y;
C++ también proporciona operadores de incremento unario (++) y de decremento (--) que pueden ser usados con tipos integrales. Si uno de esos operadores es aplicado a la izquierda de una variable (prefijo), entonces el operador es realizado después de que el resto de expresiones es evaluado. Si se aplica a una varable a la drerecha (posfijo), entonces la operación se realiza después de que el resto de expresiones es evaluado. Compiladores optimizados pueden además ejecutar los operadores de incremento de prefijo en un menor número de operaciones, pues están recomendados por encima de la versión postfix. El Ejemplo 1.18 así como el Ejemplo 1.22 demuestran el uso de operadores aritméticos de C++.
Ejemplo 1.18
editar[ . . . . ] #include <iostream> int main() { using namespace std; double x(1.23), y(4.56), z(7.89) ; int i(2), j(5), k(7); x += y ; z *= x ; cout << "x = " << x << "\tz = " << z << "\nx - z = " << x - z << endl ;
La división de enteros es manejada como un caso especial. El resultado de dividir un int con otro produce un int cociente y un int residuo. El operador / es usado para obtener el cociente. El operador % (llamado operador modulus) es usado para obtener el residuo. El Ejemplo 1.19 muestra el uso de esos operadores aritméticos de enteros.
Ejemplo 1.19
editar[ . . . . ] cout << "k / i = " << k / i << "\tk % j = " << k % j << endl ; cout << "i = " << i << "\tj = " << j << "\tk = " << k << endl; cout << "++k / i = " << ++k / i << endl; cout << "i = " << i << "\tj = " << j << "\tk = " << k << endl; cout << "i * j-- = " << i * j-- << endl; cout << "i = " << i << "\tj = " << j << "\tk = " << k << endl;
Las expresiones mixtas, si son válidas, generalmente producen resultados de los más largos de los tipos de argumentos. El Ejemplo 1.20 muestra que el resultado de dividir un double entre un int es un double.
Ejemplo 1.20
editar[ . . . . ] cout << "z / j = " << z / j << endl ;
Las conversiones serán discutidas más adelante en el Capítulo 18.
C++ también proporciona un juego completo de operadores boleanos para comparar expresiones numéricas. Casa uno de esos operadores retorna un valor boleano que puede ser false o true.
- Menor que (<)
- Menor o igual que (<=)
- Igual que (==)
- Diferente que (!=)
- Mayor que (>)
- Mayor o Igual que (>=)
Una expresión boleana puede ser negada con el operador unario de negación (!). Dos expresiones boleanas pueden ser combinadas con los operadores:
- y (&&)
- o (||)
Ejemplo 1.21
editar[ . . . . ] /* Enfoque if () ... else */ if (x * j <= z) cout << x * j << " <= " << z << endl ; else cout << x * j << " > " << z << endl; /* enfoque de operador condicional */ cout << x * k <<( (x * k < y * j) ? " < " : " >= ") << y * j << endl; return EXIT_SUCCESS; }
En adición a los operadores boleanos binarios, el Ejemplo 1.21 hace uso de la expresión condicional. Esto:
(boolExpr) ? expr1 : expr2
devuelve expr1 si boolExpr es true, y de lo contrario devuelve expr2. El Ejemplo 1.22 muestra la salida del ejemplo.
Ejemplo 1.22
editar[ . . . . ] Salida: x = 5.79 z = 45.6831 x - z = -39.8931 k / i = 3 k % j = 2 i = 2 j = 5 k = 7 ++k / i = 4 i = 2 j = 5 k = 8 i * j-- = 10 i = 2 j = 4 k = 8 z / j = 11.4208 23.16 <= 45.6831 46.32 >= 18.24