Typen in Objective-C unter iOS

147

Ich möchte nach den grundlegenden Datentypen in Objective-C unter iOS fragen.

Ich brauche die Größe, auf der die Variable dargestellt wird, und den Bereich der Variablen. Also im Beispiel: short int - 2 Bytes - signiert: -32768 bis 32767 und unsigned: 0 bis 65535 Dies ist nur ein Beispiel.

Unendliche Möglichkeiten
quelle
Objective-C ist eine dünne Schicht auf C , was bedeutet, dass Sie dieselben grundlegenden Datentypen wie habenC.
Cœur

Antworten:

349

Dies ist eine gute Übersicht:

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

oder führen Sie diesen Code aus:

32-Bit-Prozess:

  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

Wenn Sie es auf einem iPhone 3GS ausführen (iPod Touch und ältere iPhones sollten das gleiche Ergebnis erzielen), erhalten Sie:

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 

64-Bit-Prozess:

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
quelle
6
Beachten Sie, dass mit der Veröffentlichung des iOS 7 SDK einige Typen im 64-Bit-Modus größer sind.
JeremyP
13
Aktualisiert für 64-Bit-Prozess
jjxtra
Super Antwort wirklich hilfreich. Witzig, in Swift kann man einfach ein "var" deklarieren und es dabei
1
Warum ist int 32 Bit in einem 64-Bit-Prozessor? Ich sehe, dass es im A7-iPhone-Prozessor etwas namens LP64 gibt, aber ich verstehe den Grund nicht. Vielleicht aus Gründen der Abwärtskompatibilität oder des Vermächtnisses ... Ich weiß es nicht. Kennt jemand den Grund?
Ricardo
1
Wo ist UINT_MAX?
Codeherz
20

Beachten Sie, dass Sie die C99-Typen mit fester Breite auch in Objective-C perfekt verwenden können:

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

Die Wikipedia-Seite enthält eine anständige Beschreibung dessen, was in diesem Header verfügbar ist, wenn Sie keine Kopie des C-Standards haben (Sie sollten dies jedoch tun, da Objective-C nur eine winzige Erweiterung von C ist). Sie können auch die Überschriften finden limits.hund inttypes.hnützlich sein.

Stephen Canon
quelle
Es gibt auch SInt32, UInt32 usw. (wird häufig in Core Audio verwendet).
Nicolas Miari
12

Update für den neuen 64bit Bogen

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
quelle