Subtraktions-Operator -

Der Subtraktions-Operator führt eine Subtraktion zweier Elemente aus. Für arithmetische Typen entspricht dies der mathematischen Subtraktion zweier Zahlen.







4
-1
3
1.0
#include <stdio.h>

int main(){
  int a = 4;
  int b = 5;
  float c = 3.f;
  printf("%d\n",  8 - 4);
  printf("%d\n",  a - b);
  printf("%d\n",  a - 1);
  printf("%f\n",  a - c);
  return 0;
}

Details

Der Subtraktions-Operator erwartet zwei Operanden als rvalues und wird von links nach rechts abgearbeitet. Der Rückgabewert ist ein rvalue, dessen Typ grundsätzlich durch die arithmetische Umwandlung der beiden Operanden festgelegt ist.

Der Operator ist zulässig für arithmetische (Integer- und Fliesskomma-) Typen, den bool-Typ sowie Pointer. Boolsche Werte werden als Integer-Werte aufgefasst. Handelt es sich bei den Typen der beiden Operanden um Pointer-Typen, so wird nach den Regeln der Pointer-Arithmetik vorgegangen. Handelt es sich bei den Typen der beiden Operanden um arithmetische Typen, so wird gegebenfalls eine automatische arithmetische Umwandlung vorgenommen.

Der Subtraktions-Operator entspricht bei arithmetischen Typen grundsätzlich der mathematischen Subtraktion, wobei der linken Operanden auch als Minuend und der rechte als Subtrahend bezeichnet wird. Aufgrund der Rangordnung der Operatoren ist es möglich, einen Positiv- oder Negativ-Operator bei den beiden Operanden direkt hinzuschreiben.


15
2
0
int a = 5;
printf("%d\n",  10 - -a);
printf("%d\n",  a  - +3);
printf("%d\n",  -a - -a);

Der Subtraktions-Operator entspricht der direkten Umsetzung des entsprechenden Subtraktions-Befehls in Assembler und kann somit für arithmetische Typen einen Over- oder Underflow ergeben, was bei Integer-Typen zu einem Wrap-Around führt.


4294967295
unsigned int a = 0;
printf("%u\n",  a - 1);