Ответ 1
NSInteger
определяется как int
(или long
в некоторых средах). Таким образом, проверка нечетности похожа на обычный int:
NSInteger num;
if (num % 2)
// odd
else
// even
Я пытаюсь проверить, является ли NSInteger нечетным или четным. Я нашел способ сделать это с помощью C, но он не работает с Objective-C. Как мне это сделать?
NSInteger
определяется как int
(или long
в некоторых средах). Таким образом, проверка нечетности похожа на обычный int:
NSInteger num;
if (num % 2)
// odd
else
// even
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");
}
Насколько мне известно. 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
Эти другие ответы должны работать. Может быть, это проблема с вашим make файлом или чем-то еще. Подумайте о том, что часть кода.
Если все остальное не работает, просто объявите целое число как int. Вам не нужно объявлять его как NSInteger.
Используйте оператор "%". По сути, он работает над остатком, когда вы делите число. Итак:
число% 2
Было бы = 0, если бы число было четным, так как четное число, деленное на 2, не имеет остатков. Если он не равен 0, он должен быть нечетным.
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]);
Надеюсь, это поможет!!!