Heim >Backend-Entwicklung >C++ >Warum führt der Modulo-Operator manchmal zu negativen Ergebnissen?
Warum Modulo-Operationen zu negativen Ergebnissen führen
Der Modulo-Operator (%) berechnet den Rest nach Division des ersten Operanden (a) durch den zweiten Operanden (b). Um jedoch zu verstehen, warum bei bestimmten Modulo-Operationen negative Werte auftreten können, muss man sich mit den Details des Verhaltens des Operators befassen.
Die Norm ISO14882:2011(e) 5.6-4 besagt: „Für Integraloperanden ergibt der /-Operator.“ der algebraische Quotient ohne Bruchteile. Dies impliziert, dass der Quotient (a/b) eine ganze Zahl ohne Bruchteil ist. Darüber hinaus gilt: „Wenn der Quotient a/b im Typ des Ergebnisses darstellbar ist, ist (a/b)*b a%b gleich a“.
Betrachten wir die Operation (-7 % 3). Der Quotient (-7 / 3) ist -2, da er alle Bruchteile verwirft (-7,0 / 3,0 würde -2,33 ergeben, aber wir behalten nur den ganzzahligen Teil). Wenn wir den Quotienten mit dem Divisor (-2 * 3 = -6) multiplizieren und das Ergebnis zum Rest (a%b) addieren, erhalten wir (-6) (-1) = -7, was dem ursprünglichen Wert entspricht.
Lassen Sie uns nun (7 % -3) untersuchen. Der Quotient (7 / -3) ist ebenfalls -2, aber das Vorzeichen des Restes a%b ist gemäß ISO14882:2011(e) durch die Implementierung definiert. In diesem Fall wählen einige Implementierungen ein negatives Vorzeichen, was zu 1 führt.
Daher hängt das Verhalten der Modulo-Operation mit negativen Operanden von der Implementierung ab und kann entweder positive oder negative Reste erzeugen. Die Norm stellt jedoch sicher, dass unter bestimmten Voraussetzungen immer der ursprüngliche Wert aus dem Quotienten und dem Rest rekonstruiert werden kann.
Das obige ist der detaillierte Inhalt vonWarum führt der Modulo-Operator manchmal zu negativen Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!