Je pense qu'il est plus utile de penser mod
comme 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 3
n'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.