Heim >Backend-Entwicklung >C++ >Warum liefert der C-Modulo-Operator (%) manchmal negative Ergebnisse?
Modulbewertung: Negative Ergebnisse verstehen
In C ist bekannt, dass der Modulo-Operator (%) unter bestimmten Bedingungen negative Werte liefert. Dies kann rätselhaft sein, insbesondere wenn diese Vorgänge unterschiedliche Ergebnisse liefern:
std::cout << (-7 % 3) << std::endl; // -1 std::cout << (7 % -3) << std::endl; // 1
Um dieses Verhalten zu verdeutlichen, verweisen wir auf die ISO-C-Norm (ISO14882:2011). Der Modulo-Operator gibt den Rest der Division des ersten Operanden (Zähler) durch den zweiten Operanden (Nenner) zurück.
Für die erste Operation wird (-7) durch 3 dividiert, was zu einem Quotienten von - führt. 2 mit einem Rest von -1. Daher ist (-7 % 3) gleich -1.
Für die zweite Operation wird 7 durch -3 dividiert, was ebenfalls einen Quotienten von -2 ergibt. Da der Nenner jedoch negativ ist, ist das Vorzeichen des Rests durch die Implementierung definiert. In diesem Fall entscheidet sich die Implementierung dafür, einen positiven Rest zurückzugeben, der 1 ist.
Es ist wichtig zu beachten, dass das Verhalten des Modulo-Operators je nach spezifischer Plattform und Implementierung unterschiedlich sein kann. Im Allgemeinen wird empfohlen, mit negativen Werten vorsichtig umzugehen und die Möglichkeit unterschiedlicher Ergebnisse bei der Arbeit mit dem Modulo-Operator zu berücksichtigen.
Das obige ist der detaillierte Inhalt vonWarum liefert der C-Modulo-Operator (%) manchmal negative Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!