Divisions-Operator /

Der Divisions-Operator führt eine Division zweier Elemente aus. Für arithmetische Typen mit Dezimalpunkt entspricht dies der mathematischen Division zweier Zahlen. Bei Integer-Typen entspricht dies der ganzzahligen Division ohne Rest.






5
4
4
4.8
#include <stdio.h>

int main(){
  int a = 24;
  int b = 6;
  printf("%d\n",  10 / 2);
  printf("%d\n",  a / b);
  printf("%d\n",  24   / 5  );
  printf("%f\n",  24.0 / 5.0);
  return 0;
}

Details

Der Divisions-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 sowie den bool-Typ. Boolsche Werte werden als Integer-Werte aufgefasst. Die Operanden werden gegebenfalls entsprechend den Regeln der arithmetischen Umwandlung gecastet.

Der Divisions-Operator entspricht bei arithmetischen Typen grundsätzlich der mathematischen Division, wobei die beiden Operanden auch Dividend und Divisor genennt werden. Wenn mittels des Divisions-Operators jedoch zwei Integer-Werte verknüpft werden, handelt es sich um die ganzzahlige Division ohne Rest. Dies kann manchmal zu schwer auffindbaren Fehlern führen, wenn Fliesskommazahlen mit Integer-Zahlen vermischt in einer Berechnung auftreten. In diesem Falle hilft oftmals ein explizites Casting.





0.000000, 0.000000
0.000000, 3.141590
6.283180, 6.283180
6.283180, 9.424770
12.566360, 12.566360
12.566360, 15.707950
18.849540, 18.849540
18.849540, 21.991130
#include <stdio.h>
#define PI 3.14159

int main(){
  int substeps = 2;
  int numperiods = 4;
  int i;
  for(i = 0; i < numperiods * substeps; i++){
    printf("%f, ", 2 * PI * (       i / substeps));
    printf("%f\n", 2 * PI * ((float)i / substeps));
  }
  return 0;
}

Aufgrund der Rangordnung der Operatoren ist es möglich, einen Positiv- oder Negativ-Operator bei den beiden Operanden direkt hinzuschreiben.


-5.000000
4.000000
1.000000
float a = 20;
printf("%f\n",  100 / -a);
printf("%f\n",  a   / +5);
printf("%f\n",  -a  / -a);

Eine Division durch 0 ist, wie in der Mathematik festgelegt, nicht zulässig. Wenn bereits beim Compilieren eine solche Division erkannt wird, gibt der Compiler eine division by zero-Warnung aus. Tritt während der Laufzeit des Programmes eine solche Division auf, so wird dem Programm normalerweise das Signal 8 (SIGFPE: Floating Point Error) gesendet, was ohne entsprechende Behandlung zum Abbruch des Programmes führt. Bei Fliesskommatypen kann es jedoch sein, dass die Division durch 0 zum Ergebnis Unendlich führt.

division by zero -> SIGFPE
inf
printf("%d\n", 1  / 0 );
printf("%f\n", 1. / 0.);

Bei Fliesskomma-Typen kann auch eine Division durch nicht-Null zum Wert Unendlich führen. Die Division 0. / 0. ergibt den Wert nan (not a number). Die Division inf / inf ergibt ebenfalls nan, wohingegen jede andere Division durch Unendlich den Wert 0 ergibt. Anmerkung: Die Definition des Makros INFINITY befindet sich in der Datei math.h

inf
nan
nan
0.000000
printf("%f\n", 1e200  / 1e-200 );
printf("%f\n", 0. / 0.);
printf("%f\n", INFINITY / INFINITY);
printf("%f\n", 1e200 / INFINITY);