Question

Quels sont tous les résultats possibles de l'expression (n % m), où n et m Les variables entières sont-elles?

je croyais que c'était 0 à (m-1) mais incertain.

Était-ce utile?

La solution

En supposant m est un positif entier, la plage si possible les valeurs est -min(abs(n), m - 1) à travers min(abs(n), m - 1), inclusif.

Donc si n est zéro ou positif et c'est supérieur à m (le cas typique), la gamme sera 0 à m-1 compris.

Si n est zéro ou négatif et sa valeur absolue est supérieure à m, la gamme sera -(m-1) à travers 0, inclusif.

Dans tous les cas, si nLa valeur absolue est inférieure à m, la limite ci-dessus définie par m-1 est défini par n Au lieu. C'est-à-dire si n est zéro ou positif et moins que m, la gamme est 0 à n, inclusif (et ainsi de suite).

Autres conseils

Permet de prendre des exemples pour Positve N et M, votre réponse est bonne, mais ici certains cas ...

-1%10=-1
-1%-10=-1
1%-10=1
1%10=1

% De valeurs de rendement positif positives entre 0 to m-1

% négatif Valeurs de rendement négatives entre `0 Lorsque n <= m else, ce sera entre 0 et n + 1

Le résultat de n % m peut être dans la plage de] -m, + m [.

Raison: la définition de l'opérateur modulo en java est quelque chose comme Pour toutes les valeurs int n et m, les suivants doivent toujours être vraies: (n / m) xm + (n% m) == n.

Mais si n est négatif, (n / m) * m sera toujours égal ou supérieur à n, donc n % m Doit être négatif pour remplir l'équation ci-dessus.

La règle est: Le résultat de l'opération reste (si non nul) a toujours le même signe que l'opérande gauche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top