Je pense qu'il est plus utile de penser modcomme il est défini dans l'arithmétique abstraite; non pas comme une opération, mais comme une toute autre classe d'arithmétique, avec différents éléments et différents opérateurs. Cela signifie que l'addition mod 3n'est pas la même chose que l'addition «normale»; C'est; addition d'entiers.
Alors quand vous faites:
5 % -3
Vous essayez de mapper l' entier 5 sur un élément de l'ensemble de mod -3. Voici les éléments de mod -3:
{ 0, -2, -1 }
Donc:
0 => 0, 1 => -2, 2 => -1, 3 => 0, 4 => -2, 5 => -1
Disons que vous devez rester éveillé pour une raison quelconque 30 heures, combien d'heures vous restera-t-il ce jour-là? 30 mod -24.
Mais ce que C implémente n'est pas mod, c'est un reste. Quoi qu'il en soit, le fait est qu'il est logique de renvoyer des négatifs.