Modulo-Operator %

Der Modulo-Operator führt eine Restwert-Division zweier Elemente aus. Dieser Operator ist nur für Integer-Typen zulässig und entspricht der Berechnung des Restwertes einer Division.






1
0
6
#include <stdio.h>

int main(){
  int a = 20;
  int b = 7;
  printf("%d\n",  10 % 3);
  printf("%d\n",  10 % 2);
  printf("%d\n",  a % b);
  return 0;
}

Details

Der Modulo-Operator erwartet zwei Operanden als rvalues und wird von links nach rechts abgearbeitet. Der Rückgabewert ist ein rvalue und stets ein Integer-Typ.

Der Operator ist zulässig für Integer-Typen sowie den bool-Typ. Boolsche Werte werden als Integer-Werte aufgefasst. Der Modulo-Operator ist für Fliesskomma-Typen nicht zulässig. Der Compiler meldet einen Fehler wie invalid operands to binary %.

Die Modulo-Berechnung ergibt in C grundsätzlich nur mit positiven Werten sinnvolle Ergebnisse. Wenn der zweite Operand negativ ist, so wird dieses Vorzeichen von C schlichtweg ignoriert. Wenn der erste Operand negativ ist, so wird die Berechnung ausgeführt, als ob der Operand positiv wäre und schlussendlich dem Resultat das Vorzeichen wieder angehängt.

6
-6
-6
printf("%d\n",   20 % -7);
printf("%d\n",  -20 %  7);
printf("%d\n",  -20 % -7);

Um somit auch mit negativen Werten korrekte Resultate zu erhalten, ist eine Addition des Modulo-Operanden mit anschliessender erneuter Modulo-Operation notwendig. Dies funktioniert auch mit positiven Werten.

1
6
printf("%d\n", ((-20 % 7) + 7) % 7);
printf("%d\n", (( 20 % 7) + 7) % 7);