46 votes

Vérifier si un NSInteger est impair ou pair

J'ai essayé de vérifier si un NSInteger est impair ou pair. J'ai trouvé un moyen de le faire en utilisant C mais cela ne fonctionne pas avec Objective-C. Comment je ferais ça?

122voto

Vladimir Points 110327

NSInteger est défini comme int (ou long sur certains environnements). Donc, vérifier la bizarrerie est comme pour plain int:

 NSInteger num;
if (num % 2)
  // odd
else
  // even
 

19voto

ohho Points 17243
 NSInteger n = 5;

NSLog(@"%s", n & 1 ? "odd" : "even");
 

ou en utilisant si

 if (n & 1) {
  ; // odd
} else {
  ; // even
}
 

avec quelques sorties:

 if (n & 1) {
  NSLog(@"odd");
} else {
  NSLog(@"even");
}
 

l'exemple de pointeur:

 NSInteger x = 7;
NSInteger *y = &x;

if (*y & 1) {
    NSLog(@"odd");
} else {
    NSLog(@"even");
}
 

9voto

paxdiablo Points 341644

Autant que je sache. NSInteger , contrairement à NSNumber , est juste un typeder à un type entier réel le long des lignes de:

 typedef long NSInteger;
 

Donc, vous devriez pouvoir faire:

 NSInteger nsintvar = 77;
if ((nsintvar % 2) == 0) {
    // number is even
} else {
    // number is odd
}
 

Voici un programme complet, compilé sous Cygwin avec GNUstep, qui l’illustre:

 #import <stdio.h>
#import <Foundation/NSObject.h>

int main( int argc, const char *argv[] ) {
    NSInteger num;
    for (num = 0; num < 20; num++) {
        if ((num % 2) == 0) {
            printf ("%d is even\n", num);
        } else {
            printf ("%d is odd\n", num);
        }
    }
    return 0;
}
 

Il produit:

 0 is even
1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even
11 is odd
12 is even
13 is odd
14 is even
15 is odd
16 is even
17 is odd
18 is even
19 is odd
 

3voto

Cameron Points 66

Ces autres réponses devraient fonctionner. Peut-être que c'est un problème avec votre makefile ou quelque chose. Pensez en dehors de ce morceau de code.

Si tout échoue, il suffit de déclarer l'entier comme un entier. Vous n'êtes pas obligé de le déclarer comme NSInteger.

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