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