web-dev-qa-db-fra.com

Comprendre l'opérateur de module%

Je comprends l'opérateur Modulus en termes de l'expression suivante:

7 % 5

Cela rendrait 2 en raison du fait que 5 va dans 7 une fois et donne ensuite le 2 qui reste, cependant ma confusion survient lorsque vous inversez cette déclaration pour lire:

5 % 7

Cela me donne la valeur de 5 qui me confond légèrement. Bien que le total de 7 ne soit pas inclus dans le 5, une partie le reste, alors pourquoi n'y a-t-il pas de reste ou un reste de positif ou négatif 2? 

S'il calcule la valeur de 5 sur la base du fait que 7 n'entre pas du tout en 5, pourquoi le reste n'est-il pas 7 au lieu de 5?

J'ai l'impression qu'il y a quelque chose qui me manque ici dans ma compréhension de l'opérateur de module.

35
Peter Featherstone

(Cette explication concerne uniquement les nombres positifs, car cela dépend de la langue.)

Définition

Le module est le reste de la division euclidienne d'un nombre par un autre. % est appelée l'opération modulo.

Par exemple, 9 divisé par 4 est égal à 2 mais il reste 1. Ici, 9 / 4 = 2 et 9 % 4 = 1

Euclidean Division

Dans votre exemple: 5 divisé par 7 donne 0 mais il reste 5 (5 % 7 == 5).

Calcul

L'opération modulo peut être calculée à l'aide de cette équation:

a % b = a - floor(a / b) * b
  • floor(a / b) représente le nombre de fois que vous pouvez diviser a par b
  • floor(a / b) * b est le montant qui a été partagé entièrement avec succès
  • Le total (a) moins ce qui a été partagé est égal au reste de la division

Appliqué au dernier exemple, cela donne:

5 % 7 = 5 - floor(5 / 7) * 7 = 5

Arithmétique modulaire

Cela dit, votre intuition était que cela pourrait être -2 et non 5. En fait, en arithmétique modulaire, -2 = 5 (mod 7) car il existe k dans Z tel que 7k - 2 = 5.

Vous n’avez peut-être pas appris l’arithmétique modulaire, mais vous avez probablement utilisé des angles et savez que -90 ° est identique à 270 ° car c’est le modulo 360. C’est pareil, c’est génial! Alors, prenez un cercle et dites que le périmètre est 7. Ensuite, vous lisez où est 5. Et si vous essayez avec 10, il devrait être à 3 parce que 10 % 7 est 3.

60
Maxime Chéramy

Comme d'autres l'ont souligné, le module est basé sur le système restant. 

Je pense qu’un moyen plus facile de penser au module est ce qui reste après la division complète d’un dividende (nombre à diviser) par un diviseur. Donc, si nous pensons à environ 5% 7, lorsque vous divisez 5 par 7, 7 ne peuvent aller en 5 que 0 fois et lorsque vous soustrayez 0 (7 * 0) à 5 (comme nous l’avons appris à l’école élémentaire), le reste serait 5 (le mod). Voir l'illustration ci-dessous.

   0
  ______
7) 5    
__-0____
   5

Avec la même logique, -5 mod 7 sera -5 (seuls 0 7 peuvent aller dans -5 et -5-0 * 7 = -5). De même, -5 mod -7 sera également -5 . Quelques autres cas intéressants:

5 mod (-3) = 2 c'est-à-dire 5 - (-3 * -1)

(-5) mod (-3) = -2 c'est-à-dire -5 - (-3 * 1) = -5 + 3

5
Dean Sha

le module est le système des restes. 

Donc 7% 5 = 2. 

5% 7 = 5

3% 7 = 3 

2% 7 = 2

1% 7 = 1

Lorsqu'il est utilisé dans une fonction pour déterminer l'index du tableau. Est-ce que la programmation est sécuritaire? C'est une question différente. Je suppose. 

4
nammalvar 2.0

Étape 1: 5/7 = 0,71

Étape 2: Prenez le côté gauche de la décimale. Nous prenons donc 0 de 0,71 et multiplions par 7 0 * 7 = 0;

Étape n °: 5-0 = 5; Donc 5/7 = 5

2
Yongama

Certaines des réponses ici sont compliquées à comprendre pour moi. Je vais essayer d'ajouter une réponse supplémentaire pour tenter de simplifier la façon de voir les choses: 

Le processus consiste essentiellement à poser deux questions:

Par exemple. 7% 5

1- Quel nombre multiplier 5 pour obtenir 7?  

Essayons:

0 so, 0 x 5 = 0

Pourtant, nous sommes courts. Nous devons passer à 7

1 so, 1 x 5 = 5

Nous n'avons pas encore obtenu 7, essayons un nombre plus élevé. 

2 so, 2 x 5 = 10

Oh non, nous avons dépassé 7. Donc, 2 n'est pas correct, revenons à l'étape précédente (où nous avons utilisé 1) et le résultat était 5

2- Combien faut-il ajouter à 5 (le nombre que nous venons de passer de l'étape 1) pour atteindre la valeur du nombre à gauche 7?

Il est clair que le nombre est 5. 7-5 = 2.

7 % 5 = 2;

Par exemple. 5% 7

1- Quel nombre utilise-t-on pour multiplier 7 afin d'obtenir 5?  

Essayons:

0 so, 0 x 7 = 0

Nous n'avons pas encore reçu 5, essayons un nombre plus élevé. 

1 so, 1 x 7 = 7

Oh non, nous avons dépassé 5, revenons à l'étape précédente où nous avons utilisé 0 et obtenu le résultat 0

2- Combien faut-il ajouter à 0 (le numéro que nous venons de recevoir de l'étape 1) pour atteindre la valeur du nombre à gauche 5?

Il est clair que le nombre est 5. 5-0 = 5

   5 % 7 = 5
1
Mohammed Joraid

C'est juste pour les restes. Laisse moi te montrer comment

10 % 5=0
9 % 5=4 (because the remainder of 9 when divided by 5 is 4)
8 % 5=3
7 % 5=2
6 % 5=1

5 % 5=0 (because it is fully divisible by 5)

Maintenant, nous devrions nous rappeler une chose, mod signifie reste, donc

4 % 5=4

mais pourquoi 4? parce que 5 X 0 = 0so 0 est le plus proche multiple qui est inférieur à 4 donc 4-0 = 4

1
Siddarth Nyati

Une nouvelle façon de découvrir le reste est donnée ci-dessous 

Déclaration: Le reste est toujours constant 

ex : 26 divided by 7 gives R : 5 

ceci peut être trouvé facilement en trouvant le nombre qui divise complètement 26 qui est plus proche du diviseur .__ 

13 is the next number after 7 that completely divides 26 because after 7 comes 8, 9 ,

10, 11, 12 where none of them divides 26 completely and give remainder 0.
So 13 is the closest number to 7 which divides to give Remainder 0.
now take the difference (13 ~ 7) = 5 which is the Remainder .

note : for this to work divisor should be reduced to its simplest form ex: if 14 
is the divisor ..7 has to be chosen to find the closest number dividing the dividend.
0
Pramod Bhat

L'opérateur Modulus vous donne le résultat en "système de résidus réduits". Par exemple pour mod 5 il y a 5 nombres entiers comptés: 0,1,2,3,4. En fait 19 = 12 = 5 = -2 = -9 (mod 7) . La principale différence est que les langages de programmation donnent la réponse par «système de résidus réduits».

0
GokcenG

disons le de cette façon: 
en fait L'opérateur Modulus fait la même division mais ne se soucie pas de la réponse, il se soucie de le rappeler, par exemple, si vous divisez 7 à 5,
alors, laissez-moi vous guider à travers un exemple simple: 
pense que 5 est un bloc, alors par exemple nous allons avoir 3 blocs sur 15 ( WITH Nothing Left ), mais quand cette connexion arrive à ce genre de chiffres {1,3,5,7,9, 11, ...}, voici où le module sort, alors prenez la logique que j’ai déjà dite et appliquez-la pour 7, donc la réponse sera que nous avons 1 bloc de 5 sur 7 => avec 2 rappels dans notre main! c'est le module !!!
mais vous demandiez environ 5% 7, n'est-ce pas?
Prenons la logique que j'ai dite, combien de 7 blocs avons-nous en 5 ???? 0
donc le module retourne 0 ... 
c'est tout ...

0
a_m_dev