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.