Modulo-Operator in C

Jinku Hu 12 Oktober 2023
  1. Verwendung des Modulo-Operators % zur Berechnung des Rests bei der Division in C
  2. Verwendung des % Modulo-Operators zur Implementierung einer Schaltjahrüberprüfungsfunktion in C
  3. Verwenden Sie den Modulo-Operator %, um Zufallszahlen im gegebenen Ganzzahlbereich in C zu generieren
Modulo-Operator in C

In diesem Artikel werden mehrere Methoden zur Verwendung des Modulo-Operators in C vorgestellt.

Verwendung des Modulo-Operators % zur Berechnung des Rests bei der Division in C

Modulo % ist einer der binären arithmetischen Operatoren in der Sprache C. Er erzeugt den Rest nach der Division von zwei gegebenen Zahlen. Der Modulo-Operator kann nicht auf Fließkommazahlen wie float oder double angewendet werden. Im folgenden Beispielcode zeigen wir den einfachsten möglichen Fall für die Verwendung des %-Operators, indem wir das Ergebnis von Modulo 9 des gegebenen int-Arrays ausgeben.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int arr[8] = {10, 24, 17, 35, 65, 89, 55, 77};

  for (int i = 0; i < 8; ++i) {
    printf("%d/%d yields the remainder of - %d\n", arr[i], 9, arr[i] % 9);
  }

  exit(EXIT_SUCCESS);
}

Ausgabe:

10/9 yields the remainder of - 1
24/9 yields the remainder of - 6
17/9 yields the remainder of - 8
35/9 yields the remainder of - 8
65/9 yields the remainder of - 2
89/9 yields the remainder of - 8
55/9 yields the remainder of - 1
77/9 yields the remainder of - 5

Verwendung des % Modulo-Operators zur Implementierung einer Schaltjahrüberprüfungsfunktion in C

Alternativ können wir den %-Operator verwenden, um komplexere Funktionen zu implementieren. Der nächste Beispielcode demonstriert die boolesche Funktion isLeapYear, die prüft, ob das angegebene Jahr ein Schaltjahr ist oder nicht. Beachten Sie, dass ein Jahr als Schaltjahr betrachtet wird, wenn sein Wert durch 4 teilbar ist, aber nicht durch 100 teilbar ist. Außerdem ist es ein Schaltjahr, wenn der Jahreswert durch 400 teilbar ist.

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

bool isLeapYear(int year) {
  if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
    return true;
  else
    return false;
}

int main(void) {
  uint year = 2021;
  isLeapYear(year) ? printf("%d is leap\n", year)
                   : printf("%d is not leap\n", year);

  exit(EXIT_SUCCESS);
}

Ausgabe:

2021 is not leap

Verwenden Sie den Modulo-Operator %, um Zufallszahlen im gegebenen Ganzzahlbereich in C zu generieren

Eine weitere nützliche Funktion des Modulo-Operators ist die Begrenzung der Obergrenze von Zahlen bei der Zufallszahlengenerierung. Nehmen wir nämlich an, wir haben eine Funktion, die eine zufällige ganze Zahl erzeugt. In diesem Fall können wir den Rest der Division zwischen der zurückgegebenen Zahl und dem Wert nehmen, den wir als Maximum benötigen (im folgenden Beispiel als Makro MAX definiert). Beachten Sie, dass die Verwendung der Funktionen srand und rand zur Erzeugung von Zufallszahlen keine robuste Methode ist, und Anwendungen, die qualitativ hochwertige Zufallszahlen benötigen, sollten andere Möglichkeiten nutzen.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define COUNT 10
#define MAX 100

int main(void) {
  srand(time(NULL));
  for (int i = 0; i < COUNT; i++) {
    printf("%d, ", rand() % MAX);
  }
  printf("\b\b  \n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

3, 76, 74, 93, 51, 65, 76, 31, 61, 97  
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 Math