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 pour 2 nombres de même signe.
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.