3.7.2. Operadores matemáticos

Los operadores matemáticos básicos son los mismos que están disponibles en la mayoría de los lenguajes de programación: adición (+), substracción (-), división (/), multiplicación (*), y módulo (%; que produce el resto de una división entera). La división entera trunca el resultado (no lo redondea). El operador módulo no se puede utilizar con números con punto flotante.

C y C++ también utilizan notaciones abreviadas para efectuar una operación y una asignación al mismo tiempo. Esto se denota por un operador seguido de un signo igual, y se puede aplicar a todos los operadores del lenguaje (siempre que tenga sentido). Por ejemplo, para añadir 4 a la variable x y asignar x al resultado, se escribe: x += 4;.

Este ejemplo muestra el uso de los operadores matemáticos:

//: C03:Mathops.cpp
// Mathematical operators
#include <iostream>
using namespace std;

// A macro to display a string and a value.
#define PRINT(STR, VAR) \
  cout << STR " = " << VAR << endl

int main() {
  int i, j, k;
  float u, v, w;  // Applies to doubles, too
  cout << "enter an integer: ";
  cin >> j;
  cout << "enter another integer: ";
  cin >> k;
  PRINT("j",j);  PRINT("k",k);
  i = j + k; PRINT("j + k",i);
  i = j - k; PRINT("j - k",i);
  i = k / j; PRINT("k / j",i);
  i = k * j; PRINT("k * j",i);
  i = k % j; PRINT("k % j",i);
  // The following only works with integers:
  j %= k; PRINT("j %= k", j);
  cout << "Enter a floating-point number: ";
  cin >> v;
  cout << "Enter another floating-point number:";
  cin >> w;
  PRINT("v",v); PRINT("w",w);
  u = v + w; PRINT("v + w", u);
  u = v - w; PRINT("v - w", u);
  u = v * w; PRINT("v * w", u);
  u = v / w; PRINT("v / w", u);
  // The following works for ints, chars, 
  // and doubles too:
  PRINT("u", u); PRINT("v", v);
  u += v; PRINT("u += v", u);
  u -= v; PRINT("u -= v", u);
  u *= v; PRINT("u *= v", u);
  u /= v; PRINT("u /= v", u);
} ///:~

Listado 3.29. C03/Mathops.cpp


Los rvalues de todas las asignaciones pueden ser, por supuesto, mucho mas complejos.

Introducción a las macros del preprocesador

Observe el uso de la macro PRINT() para ahorrar líneas (y errores de sintaxis!). Las macros de preprocesador se nombran tradicionalmente con todas sus letras en mayúsculas para que sea fácil distinguirlas - aprenderá más adelante que las macros pueden ser peligrosas (y también pueden ser muy útiles).

Los argumentos de de la lista entre paréntesis que sigue al nombre de la macro son sustituidos en todo el código que sigue al paréntesis de cierre. El preprocesador elimina el nombre PRINT y sustituye el código donde se invoca la macro, de modo que el compilador no puede generar ningún mensaje de error al utilizar el nombre de la macro, y no realiza ninguna comprobación de sintaxis sobre los argumentos (esto lo último puede ser beneficioso, como se muestra en las macros de depuración al final del capítulo).