Compartir a través de


Operadores de aditivos: + y -

Sintaxis

expression + expression
expression - expression

Comentarios

Los operadores aditivos son:

  • Adición (+)

  • Resta (-)

Estos operadores binarios tienen asociatividad de izquierda a derecha.

Los operadores aditivos toman operandos de tipos aritméticos o de puntero. El resultado del operador de suma (+) es la suma de los operandos. El resultado del operador de resta (-) es la diferencia entre los operandos. Si uno o ambos operandos son punteros, deben ser punteros a objetos, no a funciones. Si ambos operandos son punteros, los resultados no son significativos a menos que ambos sean punteros a objetos de la misma matriz.

Los operadores aditivos toman operandos de tipos aritméticos, enteros y escalares. Se definen en la tabla siguiente.

Tipos utilizados con operadores de suma

Tipo Significado
aritméticos Los tipos enteros y de punto flotante se denominan colectivamente tipos “aritméticos”.
enteros Los tipos char e int de todos los tamaños (long, short) y las enumeraciones son tipos “enteros”.
escalares Los operandos escalares son operandos de tipo aritmético o puntero.

Las combinaciones válidas para estos operadores son:

aritméticos + aritméticos

escalares + enteros

enteros + escalares

aritméticos - aritméticos

escalares - escalares

Tenga en cuenta que la suma y resta no son operaciones equivalentes.

Si ambos operandos son de tipo aritmético, las conversiones descritas en Conversiones estándar se aplican a los operandos y el resultado es de tipo convertido.

Ejemplo

// expre_Additive_Operators.cpp
// compile with: /EHsc
#include <iostream>
#define SIZE 5
using namespace std;
int main() {
   int i = 5, j = 10;
   int n[SIZE] = { 0, 1, 2, 3, 4 };
   cout  << "5 + 10 = " << i + j << endl
         << "5 - 10 = " << i - j << endl;

   // use pointer arithmetic on array

   cout << "n[3] = " << *( n + 3 ) << endl;
}

Adición de puntero

Si uno de los operandos de una operación de suma es un puntero a una matriz de objetos, el otro debe ser de tipo entero. El resultado es un puntero del mismo tipo que el puntero original y que apunta a otro elemento de la matriz. En el siguiente fragmento de código se muestra este concepto:

short IntArray[10]; // Objects of type short occupy 2 bytes
short *pIntArray = IntArray;

for( int i = 0; i < 10; ++i )
{
    *pIntArray = i;
    cout << *pIntArray << "\n";
    pIntArray = pIntArray + 1;
}

Aunque el valor entero 1 se suma a pIntArray, eso no significa “sumar 1 a la dirección”, sino más bien "ajustar el puntero para que apunte al siguiente objeto de la matriz”, que resulta estar alejado 2 bytes (o sizeof( int )).

Nota:

El código con la forma pIntArray = pIntArray + 1 raramente aparece en programas de C++; para realizar un incremento, son preferibles estas formas: pIntArray++ o pIntArray += 1.

Resta de puntero

Si ambos operandos son punteros, el resultado de la resta es la diferencia (en elementos de matriz) entre los operandos. La expresión de resta produce un resultado entero con signo de tipo ptrdiff_t (definido en el archivo de inclusión estándar <stddef.h>).

Uno de los operandos puede ser de tipo entero, siempre y cuando sea el segundo operando. El resultado de la resta es del mismo tipo que el puntero original. El valor de la resta es un puntero al elemento de la matriz (n - i), donde n es el elemento al que señala el puntero original e i es el valor entero del segundo operando.

Consulte también

Expresiones con operadores binarios
Operadores integrados de C++, precedencia y asociatividad
Operadores de adición de C