2010-04-23 155 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]); 

希望它有幫助!

相關問題