Reconnaissant quand utiliser le module opérateur
Je sais que le module (%) de l'opérateur calcule le reste d'une division. Comment puis-je identifier une situation où j'aurais besoin d'utiliser le module opérateur?
Je sais que je peux utiliser le module opérateur pour voir si un nombre est pair ou impair et premier ou composite, mais c'est tout. Je n'ai pas souvent de penser en termes de résidus. Je suis sûr que le module opérateur est utile, et j'aimerais apprendre à en tirer parti.
Je viens d'avoir des problèmes d'identification où l'opérateur de modulo est applicable. Dans diverses situations de programmation, il est difficile pour moi de voir le problème et de réaliser "Hey! Le reste de la division de travailler ici!".
- Essentiellement, il est utilisé pour l'heure, les dates et la séquence de répétition
Vous devez vous connecter pour publier un commentaire.
Imaginez que vous avez un temps écoulé en secondes et que vous voulez convertir ce pour heures, minutes et secondes:
Avez-vous vu ce qu'il a fait? À la dernière étape, il était de retour à zéro. Cela pourrait être utilisé dans des situations comme:
Pour vérifier si N est divisible par M (par exemple, pair ou impair)
ou
N est un multiple de M.
De mettre un bouchon d'une valeur particulière. Dans ce cas, 3.
Je l'utilise pour les barres de progression et qui marque le progrès à travers une grande boucle. Le progrès n'est rapporté chaque nième fois dans la boucle, ou lorsque le comte%n == 0.
count & 0xff == 0
(vous pouvez utiliser 0xf ou 0xff ou 0xfff ou tels: le point est d'avoir un nombre en binaire est une solide chaîne de 1s)Je l'ai utilisé lors de la restriction, un certain nombre à un certain multiple:
Et ainsi de suite.
Exemple. Vous avez un message de X octets, mais dans votre protocole de taille maximale est de Y et de Y < X. Essayez d'écrire petite application qui divise message en paquets et vous allez courir dans le mod 🙂
Conversion linéaire de la structure de données de structure de la matrice:
où
a
est l'indice linéaire des données, etb
est le nombre d'éléments par ligne:La remarque ci-dessus est simplifiée logique:
a
doit être compensée -1 avant de diviser & le résultat doit être normalisée +1.Exemple: (3 rangées de 4)
Une autre utilisation courante du module: le hachage d'un nombre par endroit. Supposons que vous souhaitiez stocker an & mois dans un nombre à six chiffres 195810.
month = 195810 mod 100
tous les chiffres, 3ème à partir de la droite sont divisibles par 100, donc le reste est la 2 chiffres les plus à droite dans ce cas, le mois est de 10. Pour extraire l'année195810 /100
rendements 1958.Calcul de nombres premiers
Tout moment vous avez la division et qui veulent exprimer le reste des autres qu'en décimal, l'opérateur mod est approprié. Les choses qui viennent à l'esprit sont généralement lorsque vous voulez faire quelque chose de lisible par l'homme avec le reste. Inscription combien d'articles que vous pouvez mettre dans des seaux, et en disant: "5 gauche" est bon.
Aussi, si jamais vous êtes dans une situation où l'on peut accumuler les erreurs d'arrondi, modulo la division est bon. Si vous êtes en divisant par 3 assez souvent, par exemple, vous ne voulez pas passer .33333 autour comme le reste. En passant le reste et diviseur (c'est à dire la fraction) est approprié.
Comme @jweyrich dit, habillage de valeurs. J'ai trouvé mod très pratique quand j'ai une liste close, et je tiens à parcourir en boucle comme une liste fixe de couleurs pour certains éléments de l'INTERFACE, comme le graphique de la série, où je veux toute la série d'être différent, dans la mesure du possible, mais quand j'ai couru hors de couleurs, il suffit de recommencer depuis le début. Cela peut aussi être utilisé avec, disons, de motifs, de sorte que la deuxième fois rouge vient autour, il est en pointillés; la troisième fois, en pointillés, etc. - mais le mod est juste utilisé pour obtenir le rouge, le vert, le bleu, le rouge, le vert, le bleu, pour toujours.
Le modulo peut être utile de le convertir et de diviser le nombre total de minutes à "les heures et les minutes":
heures = minutes /60
minutes_left = minutes % 60
Dans les heures qui ont peu dont nous avons besoin à la bande de la partie décimale et qui dépend de la langue que vous utilisez.
Ensuite, nous pouvons réorganiser la sortie en conséquence.
Un cas d'utilisation, j'ai vu récemment, il était lorsque vous avez besoin d'inverse d'un nombre. De sorte que
123456
devient654321
par exemple.Il y a de nombreux cas où il est utile.
Si vous avez besoin de limiter un certain nombre à être à l'intérieur d'un certain seuil, vous pouvez utiliser le mod. Par exemple, pour générer un nombre aléatoire entre 0 et 99 vous pourriez dire:
MyRandFunction()
. (Imaginez que vous voulez des nombres aléatoires dans0 .. RAND_MAX*2/3
.)Module est également très utile, si pour une folle raison, vous avez besoin de faire de division entière et obtenir une virgule, et vous ne pouvez pas convertir un entier en un certain nombre qui prend en charge la division décimale, ou si vous avez besoin de retourner une fraction au lieu d'une virgule.
Je vais être en utilisant
%
que le module opérateurPar exemple
2/4 = 0
où faire cette
2/4 = 0 and 2 % 4 = 2
De sorte que vous pouvez être vraiment fou et disons que vous souhaitez autoriser l'utilisateur à l'entrée d'un numérateur et un dénominateur, puis d'afficher le résultat sous forme de nombre entier, puis un nombre fractionnaire.
Un autre cas où le module de la division est utile si vous pouvez augmenter ou réduire un certain nombre et que vous souhaitez pour contenir le nombre à une certaine gamme de nombre, mais quand vous arrivez vers le haut ou le bas, vous ne voulez pas de simplement arrêter. Vous souhaitez faire une boucle vers le bas ou le haut de la liste, respectivement.
Imaginer une fonction où vous êtes une boucle dans un tableau.
La raison qu'il est n = (n + variable) % (listString.maxIndex + 1) est de permettre le max de l'index pour être comptabilisés.
Ceux-ci sont juste quelques-unes des choses que j'ai eu à utiliser le module dans ma programmation, non seulement des applications de bureau, mais de la robotique et des environnements de simulation.
C'est une façon facile de dire si un nombre est pair ou impair. Just do # mod 2, si il est à 0, il est même de 1, c'est bizarre.
Mon utilisation préférée est pour l'itération.
Dire que vous avez un compteur, vous êtes incrémentation et de vouloir ensuite, prenez à partir d'une liste correspondante des éléments, mais vous n'avez
n
éléments à choisir à partir et que vous voulez répéter un cycle.var indexFromB = (counter-1)%n+1;
Résultats (
counter=indexFromB
) donnén=3
:Meilleure utilisation de l'opérateur de modulo j'ai vu jusqu'à présent est de vérifier si le Tableau que nous avons est une version tournée de tableau d'origine.
A = [1,2,3,4,5,6]
B = [5,6,1,2,3,4]
Maintenant comment vérifier si B est tourné version d'Un ?
Étape 1: Si la longueur n'est pas la même que la B de longueur, alors pour sûr, ce n'est pas une version tournée.
Étape 2: Vérification de l'index du premier élément de A dans B. Ici le premier élément de A est 1. Et son index dans B est de 2(en supposant que votre langage de programmation a index de base zéro).
permet de stocker les index dans la variable "Clé"
Étape 3: Maintenant, comment vérifier que si B est tourné version de Un comment ??
C'est là que le module de la fonction de roches :