Verwendung den Modulo-Operator in C++

Jinku Hu 12 Oktober 2023
  1. Verwendung des %-Operators zur Berechnung des Rests bei der Division
  2. Verwendung des %-Operators zum Erzeugen zufälliger Ganzzahlen kleiner als eine vorgegebene Maximalzahl in C++
  3. Verwenden von bibliotheksdefinierten Funktionsobjekten zum Ersetzen des %-Operators in C++
Verwendung den Modulo-Operator in C++

Dieser Artikel führt in die Verwendung des Modulo-Operators in C++ ein.

Verwendung des %-Operators zur Berechnung des Rests bei der Division

Die Standardfunktion des Modulo-Operators (%) ist die Berechnung des Rests einer Division. Der Rückgabewert der Anweisung - x % y stellt den Rest dar, der übrig bleibt, nachdem x durch y dividiert wurde. Der Modulo-Operator ist so definiert, dass beide Operanden ganze Zahlen sein müssen und der Divisor ungleich Null ist. Das folgende Beispiel demonstriert den Modulo-Operator, der mit verschiedenen vorzeichenbehafteten Ganzzahlpaaren verwendet wird. Beachten Sie, dass wir, um das Zeichen % mit der Funktion printf auf der Konsole auszugeben, %% verwenden sollten.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> ivec1{24, 24, -24, -24, 24};
  vector<int> ivec2{7, 8, -8, -7, -6};

  for (size_t i = 0; i < ivec1.size(); ++i) {
    printf("% -d %% % -d = % -d\n", ivec1[i], ivec2[i], ivec1[i] % ivec2[i]);
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

 24 %  7 =  3
 24 %  8 =  0
-24 % -8 =  0
-24 % -7 = -3
 24 % -6 =  0

Verwendung des %-Operators zum Erzeugen zufälliger Ganzzahlen kleiner als eine vorgegebene Maximalzahl in C++

Eine alternative Verwendung des Modulo-Operators besteht darin, den Zufallszahlengenerator so zu steuern, dass er nur Zahlen liefert, die kleiner als eine bestimmte ganze Zahl sind. Der Programmierer ist für die Auswahl des Zufallszahlengenerators verantwortlich, je nach den Anforderungen an die Qualität der Zufälligkeit, aber beide Methoden können mit % kombiniert werden, um die Obergrenze der generierten Zahlen anzugeben. In diesem Fall verwenden wir die Funktion rand, deren Rückgabewert mit Hilfe des Modulo-Operators mit dem gewünschten Maximalwert gepaart wird.

#include <ctime>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

constexpr int MAX = 1000;
constexpr int NUMS_TO_GENERATE = 10;

int main() {
  vector<int> ivec1{24, 24, -24, -24, 24};
  vector<int> ivec2{7, 8, -8, -7, -6};

  std::srand(std::time(nullptr));
  for (int i = 0; i < NUMS_TO_GENERATE; i++) {
    cout << rand() % MAX << "; ";
  }
  cout << endl;
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

98; 194; 398; 190; 782; 550; 404; 557; 509; 945;

Verwenden von bibliotheksdefinierten Funktionsobjekten zum Ersetzen des %-Operators in C++

Die C++-Standardbibliothek definiert mehrere Klassen, die traditionelle arithmetische, relationale und logische Operatoren darstellen. Diese werden Funktionsobjekte genannt und haben Namen wie std::plus<Type>, std::modulus<Type> und so weiter. Type gibt den Parametertyp des Aufrufoperators an. Das folgende Codebeispiel zeigt das Funktionsobjekt std::modulus, das auf Vektoren von ganzen Zahlen angewendet wird.

#include <ctime>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> ivec1{24, 24, -24, -24, 24};
  vector<int> ivec2{7, 8, -8, -7, -6};

  std::modulus<> intMod;
  int mod_of_nums = intMod(ivec1[1], ivec2[1]);
  printf("%d %% %d = %d\n", ivec1[1], ivec2[1], mod_of_nums);

  return EXIT_SUCCESS;
}

Ausgabe:

24 % 8 = 0
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Modulo