2010-04-23 75 views
41

我一直在试图检查一个NSInteger是奇数还是偶数。我已经找到了一种使用C来完成它的方法,但它不适用于Objective-C。我将如何做到这一点?检查NSInteger是奇数还是偶数

回答

115

NSInteger被定义为int(或在一些环境中为)。所以检查奇数是像纯int:

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

也不管用。 http://cl.ly/c7k。 – Joshua 2010-04-23 06:31:19

+0

您的“整数”变量定义一定有问题。无论如何,我喜欢贺拉斯的答案更多 – Vladimir 2010-04-23 06:45:19

+0

定义是:\t'NSInteger * integer;' – Joshua 2010-04-23 06:51:48

17
NSInteger n = 5; 

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

,或者使用如果

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"); 
} 
+0

我怎么会把这个在'if'语句中? – Joshua 2010-04-23 06:32:38

+0

“if”方式添加。 – ohho 2010-04-23 06:38:51

+0

由于某些原因,“if”方式不起作用。 http://cl.ly/ceo – Joshua 2010-04-23 06:45:46

8

据我所知。 NSInteger,不像NSNumber,只是typeder到沿线的一个真实的整数类型:

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 
+0

似乎不起作用。 http://cl.ly/Zdg – Joshua 2010-04-23 06:32:10

+0

你确定你声明变量为NSInteger吗?当你将变量声明为NSInteger *(指针而不是实际整数)时,我只见过这个问题(“无效的二进制X操作数”,其中X是一个有效的C运算符)。在我的编辑中尝试完全包含的程序。 – paxdiablo 2010-04-23 07:07:19

+0

我认为这个回答最好。 '((nsintvar%2)== 0)'更简洁;不会混合bool和整数类型。 – capikaw 2017-01-05 22:42:46

3

那些其他的答案应该工作。也许这是你的makefile或其他问题。在代码之外考虑。

如果所有其他都失败只是将整数声明为int。您不必将其声明为NSInteger。

2

使用“%”运算符。从本质上讲,当你划分一个数字时,它会计算出剩下的部分。所以:

号%2

将是= 0,如果数量为偶数,作为偶数除以2没有余数。如果它不= 0,它一定是奇数。

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]); 

希望它有帮助!

相关问题