Usa l'operatore Modulo in C++

Jinku Hu 12 ottobre 2023
  1. Usa l’operatore % per calcolare il resto nella divisione
  2. Usa l’operatore % per generare numeri interi casuali inferiori a un dato numero massimo in C++
  3. Usa oggetti funzione definiti dalla libreria per sostituire l’operatore % in C++
Usa l'operatore Modulo in C++

Questo articolo introdurrà come utilizzare l’operatore modulo in C++.

Usa l’operatore % per calcolare il resto nella divisione

La caratteristica standard dell’operatore modulo (%) è calcolare il resto di una divisione. Il valore di ritorno dell’istruzione - x % y rappresenta il resto a sinistra dopo che x è diviso per y. L’operatore modulo è definito in modo che entrambi gli operandi devono essere numeri interi e un divisore è diverso da zero. L’esempio seguente mostra l’operatore modulo utilizzato con diverse coppie di interi con segno. Nota che, per stampare il carattere % sulla console usando la funzione printf, dovremmo usare %%.

#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;
}

Produzione:

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

Usa l’operatore % per generare numeri interi casuali inferiori a un dato numero massimo in C++

L’utilizzo alternativo dell’operatore modulo consiste nel controllare il generatore di numeri casuali per fornire solo numeri inferiori a un numero intero specifico. Un programmatore è responsabile della scelta del toolkit per la generazione di numeri casuali a seconda della necessità di qualità della casualità, ma entrambi i metodi possono essere combinati con % per specificare il limite superiore dei numeri generati. In questo caso, utilizziamo la funzione rand, il cui valore di ritorno è accoppiato con il valore massimo desiderato utilizzando l’operatore modulo.

#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;
}

Produzione:

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

Usa oggetti funzione definiti dalla libreria per sostituire l’operatore % in C++

La libreria standard C++ definisce più classi che rappresentano operatori aritmetici, relazionali e logici tradizionali. Questi sono chiamati oggetti funzione e hanno nomi come std::plus<Type>, std::modulus<Type> e così via. Type specifica il tipo di parametro dell’operatore di chiamata. Il seguente esempio di codice mostra l’oggetto funzione std::modulo utilizzato su vettori di numeri interi.

#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;
}

Produzione:

24 % 8 = 0
Autore: 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