A / B → quotient de la division entière de A par B

A % B → reste de la division entière de A par B

A = quotient * B + reste

Attention !   Cela ne correspond à la division euclidienne que si A est positif.


En Java (comme en C/C++ et dans la plupart des langages), le calcul de A/B et de A%B est toujours fait avec |A| et |B|, donc |A/B| et |A%B| ne changent pas quels que soient les signes de A et B.

Ensuite, pour A/B, si A et B sont de mêmes signes, A/B est positif et si A et B sont de signes opposés, A/B est négatif.
Enfin, pour A%B, le signe de B n'a aucune influence sur le résultat et A%B est du signe de A.
Exemple -7 divisé par 5 : 7/5 = 1, 7%5 = 2, 2 signes opposés => quotient = -1 et reste = -2

Par contre, en mathématiques, le reste de la division euclidienne doit toujours être positif et le quotient est calculé en conséquence.

Exemple -7 divisé par 5 : un premier calcul donne -1 reste -2
comme le reste doit être positif, reste = -2 + 5 = 3
comme A = quotient * B + reste, quotient = (A-reste)/B = (-7-3)/5 = -10/5 = -2

Exemple de la division entière dans différents langages :    Exemple du modulo dans différents langages :
QUOTIENT opérateur 7 op 5 -7 op 5 7 op -5 -7 op -5
Mathématiques / 1 -2 -1 2
Java / 1 -1 -1 1
C / C++ / C# / 1 -1 -1 1
php / 1 -1 -1 1
VHDL / 1 -1 -1 1
           
Visual Basic div 1 ? ? ?
 
RESTE opérateur 7 op 5 -7 op 5 7 op -5 -7 op -5
Mathématiques 2 3 2 3
Java % 2 -2 2 -2
C / C++ / C# % 2 -2 2 -2
php % 2 -2 2 -2
VHDL rem 2 -2 2 -2
VHDL mod 2 3 -3 -2
Visual Basic mod 2 ? ? ?


En Java / C / C++, Q et R sont définis si B≠0 :
Q = A / B = sgn(A) * sgn(B) * abs(A) / abs(B)
R = A % B = A - Q * B
sgn(X) vaut -1, 0, ou 1 selon que X est <, =, ou > à 0
abs(X) = valeur absolue de X

Pour plus de détails, lire la spécification du langage Java.