Objective c 检查NSInteger是奇数还是偶数

Objective c 检查NSInteger是奇数还是偶数,objective-c,cocoa-touch,Objective C,Cocoa Touch,我一直在尝试检查NSInteger是奇数还是偶数。我已经找到了一种使用C的方法,但它不适用于Objective-C。我该怎么做 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是奇数还是偶数。我已经找到了一种使用C的方法,但它不适用于Objective-C。我该怎么做

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
被定义为
int
(在某些环境中是
long
)。所以检查奇怪性就像检查普通int一样:

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

据我所知
NSInteger
,不同于
NSNumber
,它只是一个按以下行排列的实整数类型的排序器:

typedef long NSInteger;
因此,您应该能够做到:

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

下面是一个完整的程序,用GNUstep在Cygwin下编译,它说明了这一点:

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

这些其他答案应该有效。可能是你的makefile有问题。在代码之外思考

如果所有其他操作都失败,只需将整数声明为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]);

希望对你有帮助

您可以将模块运算符与if-else语句一起使用,例如:

if ( (number %2) == 0 ){

printf("Your number is even");

} else {

printf("Your number is odd");

}

我如何将其放入
if
语句中?你是说什么也不打印出来吗?添加了打印输出的示例。@Horace,这似乎是因为OP使用的是
NSInteger*
而不是
NSInteger
。因为指针几乎肯定是对齐的,所以它总是均匀的。请参阅对Vlad答案的评论。PEBCAK:-)您的“整数”变量定义一定有问题。无论如何,我更喜欢Horace的答案定义是:
NSInteger*integer所以您需要将指针解引用到存储在其中的访问值:“if(*integer%2)”,这样它就变成了指针问题,而不是类型问题;-)约书亚:注意
NSInteger*整数
声明一个变量,该变量包含指向
NSInteger
的指针。如果这不是您的意思,请从声明中删除
*
(并且,无论哪种方式,都不要取消引用该值,因为它不是指针)。您确定要将该变量声明为NSInteger吗?我只在将变量声明为NSInteger*(指针而不是实际整数)时见过这个问题(“二进制X的操作数无效”,其中X是有效的C运算符)。试试我编辑的完整程序。我认为这是最好的答案
((nsintvar%2)==0)
更简洁;不混合布尔类型和整数类型。嗨,欢迎使用堆栈溢出。由于这是一个非常古老的问题,有多个流行的答案,请编辑您的答案,以确定您认为它有哪些贡献,而其他人没有。谢谢
if ( (number %2) == 0 ){

printf("Your number is even");

} else {

printf("Your number is odd");

}