He estado tratando de verificar si un NSInteger es impar o par. He encontrado una manera de hacerlo usando C pero no funciona con Objective-C. ¿Cómo haría esto?Comprobando si un NSInteger es impar o incluso
Respuesta
NSInteger
se define como int
(oen algunos entornos). Así que comprobar en rareza es como para llano int:
NSInteger num;
if (num % 2)
// odd
else
// even
NSInteger n = 5;
NSLog(@"%s", n & 1 ? "odd" : "even");
o usar si
if (n & 1) {
; // odd
} else {
; // even
}
con un poco de salida:
if (n & 1) {
NSLog(@"odd");
} else {
NSLog(@"even");
}
el ejemplo puntero:
NSInteger x = 7;
NSInteger *y = &x;
if (*y & 1) {
NSLog(@"odd");
} else {
NSLog(@"even");
}
Por lo que yo sé. NSInteger
, a diferencia de NSNumber
, es sólo un typeder a un verdadero tipo entero a lo largo de las líneas de:
typedef long NSInteger;
Por lo que debe ser capaz de hacer:
NSInteger nsintvar = 77;
if ((nsintvar % 2) == 0) {
// number is even
} else {
// number is odd
}
Aquí es un programa completo, compilado en Cygwin con GNUstep, que lo ilustra:
#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;
}
Emite:
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
Parece que no funciona. http://cl.ly/Zdg – Joshua
¿Estás seguro de que declaras la variable como NSInteger? Solo he visto ese problema ("Operandos inválidos a X binario", donde X es un operador C válido) cuando declaras la variable como NSInteger * (el puntero en lugar del entero real). Prueba el programa completamente contenido en mi edición. – paxdiablo
Creo que esta respuesta es la mejor. '((nsintvar% 2) == 0)' es más conciso; no mezcla los tipos bool y entero. – capikaw
Esas otras respuestas deberían funcionar. Tal vez sea un problema con tu archivo MAKE o algo así. Piensa fuera de ese pedazo de código.
Si todo lo demás falla, solo declare el entero como un int. No tiene que declararlo como NSInteger.
Utilice el operador "%". Básicamente, funciona el resto cuando se divide un número. Por lo tanto:
número 2%
sería = 0 si el número era aún, como un número par dividido por 2 no tiene residuos. Si no es = 0, debe ser impar.
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]);
Hope it helps !!!
- 1. Verificar si un número ingresado es impar
- 2. Comprobando si una cadena es un doble o no
- 3. Comprobar si un objeto es NSInteger
- 4. ¿Es esto un elemento par o impar?
- 5. Comprobando si es nulo
- 6. comprobando si existe o no un paquete
- 7. Comprobando si un número es positivo o negativo usando operadores bit a bit
- 8. Comprobando si una página es válida incluso cuando CausesValidation es falsa
- 9. Comprobando si existe una URL o no
- 10. Comprobando si mysql_query devolvió algo o no
- 11. Comprobando si el valor es una función
- 12. Comprobando si la propiedad es configurable/eliminable
- 13. Comprobando si un archivo es un directorio o solo un archivo
- 14. Comprobando si un bit está configurado o no
- 15. Comprobando si un archivo es un ensamblado .NET
- 16. Comprobando si un cierto tipo es un delegado de Acción
- 17. Comprobando si un objeto es un diccionario en C#
- 18. Comprobando si un ValidationGroup es válido desde el código subyacente
- 19. Determinar si la cadena es de longitud par o impar con expresión regular
- 20. Comprobando si el objeto es un elemento DOM
- 21. Comprobando si una anotación es de un tipo específico
- 22. Comprobando si una secuencia es un archivo zip
- 23. PHP - Comprobando si el resultado es falso;
- 24. Comprobando si isset y es verdadero?
- 25. par o impar ID valores
- 26. Comprobando si un número complejo tiene NaN
- 27. comprobando si el número ingresado es un dígito en jquery
- 28. Comprobando si una variable es un número entero en javascript
- 29. Comprobando si un NSDate es mayor que otro
- 30. Comprobando si un número de ISBN es correcto
No funciona tampoco. http://cl.ly/c7k. – Joshua
debe haber algo mal con su definición de variable "entera".De todos modos, me gusta la respuesta de Horace más – Vladimir
La definición es: \t 'NSInteger * entero;' – Joshua