Modul für negative Zahlen in C++
- Rest vs. Modul
-
der
%
-Operator in C++ -
Implementierung von
%
in C++ -
der
%
-Operator in Python -
Implementierung von
%
in Python - Methoden zum Erreichen des äquivalenten Modulus von Python in C++
In diesem Tutorial werden wir die Unterschiede zwischen Rest und Modul entdecken. Wir lernen die Grundlagen des %
-Operators kennen.
Später werden wir lernen, wie sich der Operator %
in Python und C++ verhält. Abschließend fassen wir diesen Artikel zusammen, indem wir einige Möglichkeiten zur Implementierung der Modulo-Funktionalität in C++ diskutieren.
Rest vs. Modul
Das genaue Verhalten des %
-Zeichens kann je nach Programmiersprache variieren. Der Bediener produziert häufig überraschende Ergebnisse, die uns verwirren.
Erzeugt es einen Modul oder einen Rest? Bevor wir sein Verhalten in Programmiersprachen untersuchen, wollen wir zunächst klären, wie sie sich unterscheiden.
Rest
Der Rest ist einfach der Teil, der nach der arithmetischen Division zweier ganzer Zahlen übrig bleibt. Ob positiv oder negativ, das Vorzeichen für den Rest wird immer durch das Vorzeichen des Dividenden bestimmt.
Überprüfen Sie die folgenden Beispiele, um dies klar zu verstehen.
Beispiele:
-
7 % 3 = 1
Hier ist die Dividende 7, was ein positives Vorzeichen hat, also wird das Ergebnis auch ein positives Vorzeichen haben.
-
-7 % 3 = -1
Hier ist die Dividende -7, was ein negatives Vorzeichen hat, also wird das Ergebnis auch ein negatives Vorzeichen haben.
-
7 % -3 = 1
Hier ist die Dividende 7, was ein positives Vorzeichen hat, also wird das Ergebnis auch ein positives Vorzeichen haben.
-
-7 % -3 = -1
Hier ist die Dividende -7, was ein negatives Vorzeichen hat, also wird das Ergebnis auch ein negatives Vorzeichen haben.
Modul
Der Modulus ist die Summe des Restes und des Divisors, wenn sie entgegengesetzte Vorzeichen haben, und des verbleibenden Teils nach der arithmetischen Division, wenn der Rest und der Divisor beide dasselbe Vorzeichen haben.
Der Modul hat das gleiche Vorzeichen wie der Divisor. Überprüfen Sie die folgenden Beispiele, um dies klar zu verstehen.
Beispiele:
-
5 % 3 = 2
Hier sind sowohl Divisor als auch Rest positiv vorzeichenbehaftet, also wird auch der Rest positiv vorzeichenbehaftet sein.
-
-5 % 3 = 1
Dabei haben Teiler und Rest das entgegengesetzte Vorzeichen, sodass das Ergebnis die Summe aus Rest und Teiler ist. d.h. -2 + 3 = 1
-
5 % -3 = -1
Hier haben sowohl Teiler als auch Rest entgegengesetzte Vorzeichen. Das Ergebnis ist die Summe aus Rest und Divisor. d.h. 2 + -3 = -1
-
-5 % -3 = -2
Hier haben sowohl Divisor als auch Rest das gleiche Vorzeichen, sodass das Ergebnis das gleiche wie der Rest ist.
Aus den obigen Beispielen geht hervor, dass Modul und Rest gleich sind, wenn sowohl Dividende als auch Divisor positiv sind. Bei negativen Zahlen ist beides anders.
An diesem Punkt hoffen wir, dass klar ist, wie sich Rest und Modul unterscheiden. Lassen Sie uns nun über das Verhalten des Operators %
in Python und C++ sprechen.
der %
-Operator in C++
In C++ ist das %
als Modulo-Operator bekannt. Es ist ein arithmetischer Operator.
Es wird verwendet, um den Rest zu berechnen, der sich aus der Durchführung einer ganzzahligen Division ergibt. Obwohl es den Namen “Modulo” hat, ist es wichtig, sich daran zu erinnern, dass es den Modulus nicht liefert.
In C++ gibt das Symbol %
nur den Rest zurück. Überprüfen Sie das Beispiel unten.
#include <iostream>
using namespace std;
int main() {
cout << -7 % 3 << endl;
cout << 7 % -3 << endl;
}
Ausgang:
-1
1
Wie die Ausgabe vermuten lässt, gibt uns der Operator %
keinen Modulus. Es gibt nur einen Rest zurück.
Implementierung von %
in C++
Sehen wir uns die Implementierung von %
in C++ an. Der Rest in C++ wird gemäß der folgenden Gleichung zurückgegeben.
Rest = a - ( b * trunc ( a / b ) )
Lassen Sie uns unsere Logik zur Berechnung des Rests entwickeln, indem wir die obige Gleichung ohne den Operator %
verwenden.
#include <iostream>
using namespace std;
int calRemainder(int a, int b) {
int q = a / b;
return a - (b * q);
}
int main() {
int a = -7, b = 3;
cout << calRemainder(a, b) << endl;
}
Ausgang:
-1
der %
-Operator in Python
In Python ist das %
als Modulo-Operator bekannt. Der Modulo-Operator wird in Python als arithmetische Operation betrachtet.
Es wird verwendet, um den modulus
zu berechnen, der sich aus der Durchführung einer ganzzahligen Division ergibt. Hier unterscheidet sich Python von C++.
Wenn wir den Modulo-Operator in C++ verwenden, gibt er den Rest zurück, während Python den Modulo zurückgibt. Überprüfen Sie die folgenden Beispiele, um das Verhalten des Modulo-Operators in Python zu beobachten.
print(-7 % 3)
print(7 % -3)
Ausgang:
2
-2
Im ersten Beispiel ergibt -7 % 3
den Rest -1. Da der Rest (-1) und der Divisor (3) entgegengesetzte Vorzeichen haben, ergibt ihre Summe den Modulus. d.h. -1 + 3 = 2
.
Dasselbe gilt für Beispiel 2.
Implementierung von %
in Python
Sehen wir uns die Implementierung von %
in Python an. Der Modulus in Python wird gemäß der folgenden Gleichung zurückgegeben.
Modul = a - ( b * Boden ( a / b ) )
Lassen Sie uns unsere Logik zur Berechnung des Moduls entwickeln, indem wir die obige Gleichung ohne den %
-Operator verwenden.
from math import floor
def calModulus(a, b):
q = floor(a / b)
return a - b * q
print(calModulus(-7, 3))
Ausgang:
2
Methoden zum Erreichen des äquivalenten Modulus von Python in C++
Wir haben untersucht, wie sich Rest und Modul unterscheiden und wie sich der Operator %
in Python und C++ verhält. In Python erhalten Sie immer nicht negative Werte, wenn Sie %
mit einem positiven Teiler verwenden.
Meistens arbeiten wir mit positiven Teilern, und wir brauchen die Funktionalität des Moduls und nicht nur den Rest. Modulus gibt immer positive Werte zurück, wenn der Divisor ein positives Vorzeichen hat.
Sehen wir uns verschiedene Techniken an, um dieses Verhalten in C++ zu erreichen.
Methode 1: Implementieren Sie eine Gleichung
Wir können das Python-Modulus-Verhalten erreichen, indem wir die Gleichung modulus = a - ( b * floor( a / b ) )
in C++ implementieren.
#include <math.h>
#include <iostream>
using namespace std;
int getModulus(int dividend, int divisor) {
// Type casting is necessary as (int)/(int) will give int result, i.e. -5 / 2
// will give -1 and not -2.5
int t = (int)floor((double)dividend / divisor);
return dividend - divisor * t;
}
int main() { cout << getModulus(-8, 3); }
Ausgang:
1
Methode 2: Addiere den Rest und den Divisor
Eine andere Möglichkeit, die Modulo-Funktionalität in C++ zu erreichen, besteht darin, den Rest und den Divisor zu addieren, wenn sie entgegengesetzte Vorzeichen haben.
Wir gehen davon aus, dass unser Divisor ein positives Vorzeichen hat, also addieren wir ihn immer dann zum Divisor, wenn wir einen negativen Rest erhalten, um den Modulwert zu erhalten.
#include <iostream>
using namespace std;
int getModulus(int dividend, int divisor) {
int t = dividend % divisor;
return t >= 0 ? t : t + divisor;
}
int main() { cout << getModulus(-7, 3); }
Ausgang:
2