161 votes

Vérifier si le nombre est pair ou impair

Comment puis-je déterminer si un nombre donné est pair ou impair ? Cela fait longtemps que j'essaie de trouver une réponse à cette question, mais je n'y arrive pas.

236voto

lucasmo Points 1574

Vous pouvez utiliser l'opérateur modulus, mais cela peut être lent. Si c'est un nombre entier, vous pouvez le faire :

if ( (x & 1) == 0 ) { even... } else { odd... }

En effet, le bit de poids faible sera toujours activé sur un nombre impair.

30 votes

Je suis toujours étonné que les gens préfèrent le modulus à la simple vérification du premier bit du nombre. Évidemment, si le premier bit est activé, alors le nombre doit être impair. C'est généralement plus rapide, et ça se lit tout aussi bien à mon avis. Je pense que la raison pour laquelle les autres ne le préfèrent pas au modulus se résume à un manque de compréhension du binaire.

3 votes

@crush Le compilateur/JVM est (probablement) assez intelligent pour optimiser N % 2 . L'optimisation prématurée est la racine de tous les maux...

5 votes

@dtech Je pense que vous comprenez mal le sens de l'optimisation prématurée. Si vous savez à l'avance qu'une méthode est plus performante qu'une autre, alors ce n'est pas de l'optimisation prématurée que d'utiliser la méthode la plus performante. C'est de l'intelligence. Cela dit, mon commentaire portait davantage sur le fait que la vérification du premier bit est plus logique que l'utilisation du module lors de la simple vérification du pair/impair. Le problème est que de nombreux programmeurs ne comprennent pas ce que fait l'une ou l'autre méthode et se contentent de suivre des tutoriels.

130voto

Andrew Points 2910
if ((x % 2) == 0) {
   // even
} else {
   // odd
}

31voto

Ryan Stewart Points 46960

Si le reste lorsque vous divisez par 2 est 0, c'est pair. % est l'opérateur pour obtenir un reste.

15 votes

L'opérateur % est appelé modulo.

4 votes

@Anthony : En fait, c'est le "opérateur de reste" .

4 votes

Le terme mathématique est le modulus, et son application est plus large que l'obtention du reste. (A % B) elle-même peut être utilisée comme une expression, et c'est là que les choses deviennent amusantes.

26voto

Phil Points 426

L'opérateur de reste, %, vous donnera le reste après avoir divisé par un nombre.

Así que n % 2 == 0 sera vrai si n est pair et faux si n est impair.

23voto

fireshadow52 Points 3796

Tout nombre pair est divisible par deux, qu'il soit décimal ou non (mais la décimale, si elle est présente, doit également être paire). Vous pouvez donc utiliser la fonction % (modulo), qui divise le nombre de gauche par le nombre de droite et renvoie le reste...

boolean isEven(double num) { return ((num % 2) == 0); }

1 votes

"Indépendamment du fait qu'il s'agisse d'une décimale" n'a aucun sens. La décimale est un radix. Voulez-vous dire "contient une partie fractionnaire" ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X