Tipos en Objective-C en iOS

147

Quiero preguntar sobre los tipos de datos fundamentales en Objective-C en iOS.

Necesito el tamaño en el que se representa la variable y el rango de la variable. Entonces, en el ejemplo: int corto - 2 bytes - con signo: -32768 a 32767 y sin signo: 0 a 65535 Esto es solo un ejemplo.

Posibilidades infinitas
fuente
Objective-C es una capa delgada sobre C , lo que significa que tiene los mismos tipos de datos fundamentales queC.
Cœur

Respuestas:

349

Este es un buen resumen:

http://reference.jumpingmonkey.org/programming_languages/objective-c/types.html

o ejecuta este código:

Proceso de 32 bits:

  NSLog(@"Primitive sizes:");
  NSLog(@"The size of a char is: %d.", sizeof(char));
  NSLog(@"The size of short is: %d.", sizeof(short));
  NSLog(@"The size of int is: %d.", sizeof(int));
  NSLog(@"The size of long is: %d.", sizeof(long));
  NSLog(@"The size of long long is: %d.", sizeof(long long));
  NSLog(@"The size of a unsigned char is: %d.", sizeof(unsigned char));
  NSLog(@"The size of unsigned short is: %d.", sizeof(unsigned short));
  NSLog(@"The size of unsigned int is: %d.", sizeof(unsigned int));
  NSLog(@"The size of unsigned long is: %d.", sizeof(unsigned long));
  NSLog(@"The size of unsigned long long is: %d.", sizeof(unsigned long long));
  NSLog(@"The size of a float is: %d.", sizeof(float));
  NSLog(@"The size of a double is %d.", sizeof(double));

  NSLog(@"Ranges:");
  NSLog(@"CHAR_MIN:   %c",   CHAR_MIN);
  NSLog(@"CHAR_MAX:   %c",   CHAR_MAX);
  NSLog(@"SHRT_MIN:   %hi",  SHRT_MIN);    // signed short int
  NSLog(@"SHRT_MAX:   %hi",  SHRT_MAX);
  NSLog(@"INT_MIN:    %i",   INT_MIN);
  NSLog(@"INT_MAX:    %i",   INT_MAX);
  NSLog(@"LONG_MIN:   %li",  LONG_MIN);    // signed long int
  NSLog(@"LONG_MAX:   %li",  LONG_MAX);
  NSLog(@"ULONG_MAX:  %lu",  ULONG_MAX);   // unsigned long int
  NSLog(@"LLONG_MIN:  %lli", LLONG_MIN);   // signed long long int
  NSLog(@"LLONG_MAX:  %lli", LLONG_MAX);
  NSLog(@"ULLONG_MAX: %llu", ULLONG_MAX);  // unsigned long long int

Cuando se ejecuta en un iPhone 3GS (iPod Touch y iPhones anteriores deberían producir el mismo resultado) obtienes:

Primitive sizes:
The size of a char is: 1.                
The size of short is: 2.                 
The size of int is: 4.                   
The size of long is: 4.                  
The size of long long is: 8.             
The size of a unsigned char is: 1.       
The size of unsigned short is: 2.        
The size of unsigned int is: 4.          
The size of unsigned long is: 4.         
The size of unsigned long long is: 8.    
The size of a float is: 4.               
The size of a double is 8.               
Ranges:                                  
CHAR_MIN:   -128                         
CHAR_MAX:   127                          
SHRT_MIN:   -32768                       
SHRT_MAX:   32767                        
INT_MIN:    -2147483648                  
INT_MAX:    2147483647                   
LONG_MIN:   -2147483648                  
LONG_MAX:   2147483647                   
ULONG_MAX:  4294967295                   
LLONG_MIN:  -9223372036854775808         
LLONG_MAX:  9223372036854775807          
ULLONG_MAX: 18446744073709551615 

Proceso de 64 bits:

The size of a char is: 1.
The size of short is: 2.
The size of int is: 4.
The size of long is: 8.
The size of long long is: 8.
The size of a unsigned char is: 1.
The size of unsigned short is: 2.
The size of unsigned int is: 4.
The size of unsigned long is: 8.
The size of unsigned long long is: 8.
The size of a float is: 4.
The size of a double is 8.
Ranges:
CHAR_MIN:   -128
CHAR_MAX:   127
SHRT_MIN:   -32768
SHRT_MAX:   32767
INT_MIN:    -2147483648
INT_MAX:    2147483647
LONG_MIN:   -9223372036854775808
LONG_MAX:   9223372036854775807
ULONG_MAX:  18446744073709551615
LLONG_MIN:  -9223372036854775808
LLONG_MAX:  9223372036854775807
ULLONG_MAX: 18446744073709551615
Philippe Leybaert
fuente
66
Tenga en cuenta que con el lanzamiento del SDK de iOS 7, algunos tipos son más grandes en el modo de 64 bits.
JeremyP
13
Actualizado para el proceso de 64 bits
jjxtra
Impresionante respuesta realmente útil. Sin embargo, es divertido, en Swift puedes declarar un "var" y dejarlo así jaja :)
1
¿Por qué int tiene 32 bits en un procesador de 64 bits? Veo que hay algo llamado LP64 en el procesador de iPhone A7, pero no entiendo la razón. Tal vez por compatibilidad con versiones anteriores o legado ... No lo sé. ¿Alguien sabe la razón?
Ricardo
1
¿Dónde está UINT_MAX?
codehearted
20

Tenga en cuenta que también puede usar los tipos de ancho fijo C99 perfectamente en Objective-C:

#import <stdint.h>
...
int32_t x; // guaranteed to be 32 bits on any platform

La página de wikipedia tiene una descripción decente de lo que está disponible en este encabezado si no tiene una copia del estándar C (sin embargo, debería, ya que Objective-C es solo una pequeña extensión de C). También puede encontrar los encabezados limits.hy inttypes.hser útil.

Stephen Canon
fuente
También hay SInt32, UInt32, etc. (se usa mucho en Core Audio).
Nicolas Miari
12

Actualización para el nuevo arco de 64 bits

Ranges:
CHAR_MIN:   -128
CHAR_MAX:   127
SHRT_MIN:   -32768
SHRT_MAX:   32767
INT_MIN:    -2147483648
INT_MAX:    2147483647
LONG_MIN:   -9223372036854775808
LONG_MAX:   9223372036854775807
ULONG_MAX:  18446744073709551615
LLONG_MIN:  -9223372036854775808
LLONG_MAX:  9223372036854775807
ULLONG_MAX: 18446744073709551615
Maciej Swic
fuente