Проверка, нечетен ли NSInteger или ровен

Я пытался проверить, нечетен ли NSInteger или ровен. Я нашел способ сделать это с помощью C, но это не работает с Objective C. Как я сделал бы это?

44
задан Joshua 23 April 2010 в 06:51
поделиться

4 ответа

NSInteger определяется как int (или long в некоторых средах). Итак, проверка на странность похожа на простой int:

NSInteger num;
if (num % 2)
  // odd
else
  // even
120
ответ дан 26 November 2019 в 21:39
поделиться

Насколько мне известно. NSInteger , в отличие от NSNumber , представляет собой просто средство набора для реального целочисленного типа в соответствии со строками:

typedef long NSInteger;

Итак, вы должны уметь:

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

Вот полная программа, скомпилирован под Cygwin с помощью GNUstep, который иллюстрирует это:

#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;
}

Он выводит:

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
9
ответ дан 26 November 2019 в 21:39
поделиться
NSInteger n = 5;

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

или использование if

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

с некоторым выходом:

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

пример указателя:

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

if (*y & 1) {
    NSLog(@"odd");
} else {
    NSLog(@"even");
}
18
ответ дан 26 November 2019 в 21:39
поделиться

Эти другие ответы должны работать. Может быть, проблема в вашем make-файле или что-то в этом роде. Думайте за пределами этого фрагмента кода.

Если ничего не помогает, просто объявите целое число как int. Вам не нужно объявлять его как NSInteger.

3
ответ дан 26 November 2019 в 21:39
поделиться