L’opérateur modulo (%) est très utile en programmation pour trouver le reste d’une division, gérer les cycles, les rotations, ou vérifier la divisibilité. Mais lorsqu’on travaille avec des nombres négatifs, son comportement peut surprendre. Comprendre comment l’utiliser correctement est essentiel pour éviter les bugs.

1. Rappel : qu’est-ce que le modulo

Le modulo donne le reste de la division entière :

a%b=restequanda=b×q+reste
a%b=restequanda=b×q+reste

Exemple :

7 % 3  # 1, car 7 = 3*2 + 1

7 divisé par 3 → quotient 2, reste 1.

Le résultat du modulo est le reste après division.

2. Le piège des nombres négatifs

Le comportement de % avec des nombres négatifs dépend du langage :

2.1 Python

Le reste a le même signe que le diviseur.

print(-7 % 3)  # 2
print(7 % -3)  # -2

2.2 C / C++ / Java

Le reste a le même signe que l’opérande de gauche (le dividende).

System.out.println(-7 % 3); // -1

💡 Conclusion : faites attention au signe, surtout si vous écrivez du code portable.

3. Astuces pour bien utiliser modulo avec négatifs
3.1 Pour obtenir un résultat toujours positif

Si vous voulez que le résultat soit toujours positif, vous pouvez faire :

r = (a % b + b) % b

Exemple :

a = -7
b = 3
r = (-7 % 3 + 3) % 3
print(r)  # 2

3.2 Pour gérer des cycles

Le modulo est pratique pour faire tourner des indices dans un tableau ou gérer des horaires (heures sur une horloge).

jours = ['Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim']
jour_actuel = 5  # Samedi
jour_suivant = (jour_actuel + 1) % 7
print(jours[jour_suivant])  # Dimanche

Même avec des nombres négatifs :

jour_precedent = (jour_actuel - 1) % 7
print(jours[jour_precedent])  # Ven

4. Bonnes pratiques

Connaître le comportement du modulo dans votre langage.

Pour un résultat positif, utilisez (a % b + b) % b.

Évitez les surprises avec les indices négatifs ou les calculs de cycle.

Tester avec des valeurs négatives pour vérifier votre logique.