Modulo mit negativen Zahlen
-
Hallo,
ich hab mal ne einfache Frage:
Warum liefertsigned int i = -1; std::cout << (i%13)<< std::endl;entgegen meiner Annahme -1 und nicht 12 zurück?
Gruß,
Modulo
-
Module liefert den Rest einer Integer Division:
(-1)/13 = 0
Der Rest ist dann (-1) - 0*13 = -1.
Daher
Wenn du 12 willst machs so:
int special_modulo(int a, int b) { int m = a % b; return m >= 0 ? m : m + b; }
-
Es sollte dennoch beachtet werden, sofern einer der Operanden negativ ist, ist das Vorzeichen des Restes implementationsspezifisch. Oder anderes formuliert, das Ergebnis hängt von den Operanden ab.
Der Standard macht lediglich folgende Aussage
(a/b)*b + a%b = aUnd auf das Beispiel bezogen
(-1/13)*13 + -1%13 = -1 0*13 + -1%13 = -1 -1%13 = -1Womit klar sein sollte, welches Ergebnis die Rechnung liefert. Damit kannst du auch mal testen, welches Ergebnis 1%-13 liefert.