Negativ-Operator -

Der Negativ-Operator dient der expliziten Negierung eines Elementes und wird in C auch mit unary minus bezeichnet. Er wird stets VOR das zu kennzeichnende Element geschrieben, beispielsweise -value oder -1000.






1000
-1000
-1000
1000
#include <stdio.h>

int main(){
  int pos =   1000;
  int neg = - 1000;
  printf("%d\n",     pos);
  printf("%d\n",   - pos);
  printf("%d\n",     neg);
  printf("%d\n",   - neg);
  return 0;
}

Details

Der Negativ-Operator erwartet einen Operanden als rvalue und wird von rechts nach links abgearbeitet. Der Rückgabewert ist ein rvalue und hat denselben Typ wie der Operand.

Die semantische Bedeutung der Negierung ist die Multiplikation mit -1. Der Computer führt diese Negierung aus, indem er das jeweilige, im Compiler verwendete Komplement bildet.

Der Negativ-Operator wind insbesondere verwendet, um einen im Programmcode geschriebenen festen Integer-Wert als negativ zu markieren. In diesem Falle wird der Compiler oftmals die Zahl nicht zur Laufzeit negieren, sondern den festen Wert bereits während der Compilation im schlussendlich verwendeten Komplement speichern.

Folgende Konstrukte sind nur begrenzt sinnvoll, jedoch möglich:

1000
-1000
-1000
printf("%d\n", - - pos);
printf("%d\n", - - neg);
printf("%d\n", - - - - - - - pos);

Vorsicht: Folgende Zeile sieht zwar fast gleich aus, allerdings handelt es sich aufgrund des fehlenden Abstandes zwischen den den beiden - hier um den Decrement-Operator, welcher die Variable verändert:

999
printf("%d\n",  -- pos);

Dieser Unterschied ist jedoch hinfällig, wenn der Negativ-Operator gemischt mit dem Positiv-Operator auftritt, da ein solcher Operator nicht existiert und somit als jeweils einzelne Positiv- und Negativ-Operatoren aufgelöst wird:

-1000
-1000
-1000
-1000
printf("%d\n", - + pos);
printf("%d\n",  -+ pos);
printf("%d\n", + - pos);
printf("%d\n",  +- pos);