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 pourrais-je faire ça?

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

 NSInteger num; if (num % 2) // odd else // even 
 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 du pointeur:

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

Pour autant que je sache. NSInteger , contrairement à NSNumber , est juste un typeder à un vrai type d’entier dans le sens 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  #import  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 

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, déclarez simplement l’entier comme un int. Vous n’avez pas à le déclarer comme NSInteger.

Utilisez l’opérateur “%”. Essentiellement, cela fonctionne le rest lorsque vous divisez un nombre. Alors:

numéro 2

Serait = 0 si le nombre était pair, car un nombre pair divisé par 2 n’a pas de rest. Si ce n’est pas le cas = 0, il doit être impair.

 NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", nil]; // NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", @"B", nil]; // NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", @"B", @"C", nil]; // NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", nil]; // NSArray *arrayTotal = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", nil]; NSArray *arrLeft; NSArray *arrRight; NSRange range; range.location = 0; range.length = ([arrayTotal count] % 2) ? ([arrayTotal count] / 2) + 1 : ([arrayTotal count] / 2); arrLeft = [arrayTotal subarrayWithRange:range]; range.location = range.length; range.length = [arrayTotal count] - range.length; arrRight = [arrayTotal subarrayWithRange:range]; NSLog(@"Objects: %lu", (unsigned long)[arrLeft count]); NSLog(@"%@", [arrLeft description]); NSLog(@"Objects: %lu", (unsigned long)[arrRight count]); NSLog(@"%@", [arrRight description]); 

J’espère que cela aide !!!