ประเภทใน Objective-C บน iOS


147

ฉันต้องการถามเกี่ยวกับประเภทข้อมูลพื้นฐานใน Objective-C บน iOS

ฉันต้องการขนาดที่มีการแสดงตัวแปรและช่วงของตัวแปร ดังนั้นในตัวอย่าง: short int - 2 ไบต์ - เซ็นชื่อ: -32768 ถึง 32767 และ unsigned: 0 ถึง 65535 นี่เป็นเพียงตัวอย่างเท่านั้น


Objective-C เป็นชั้นบาง ๆ บน Cซึ่งหมายความว่าคุณมีชนิดข้อมูลพื้นฐานที่เหมือนCกัน
Cœur

คำตอบ:


349

นี่เป็นภาพรวมที่ดี:

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

หรือเรียกใช้รหัสนี้:

กระบวนการ 32 บิต:

  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

เมื่อรันบน iPhone 3GS (iPod Touch และ iPhone ที่เก่ากว่าควรให้ผลลัพธ์เหมือนกัน) คุณจะได้รับ:

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 บิต:

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

6
โปรดทราบว่าด้วยการเปิดตัว iOS 7 SDK บางประเภทนั้นใหญ่กว่าในโหมด 64 บิต
JeremyP

13
อัปเดตสำหรับกระบวนการ 64 บิต
jjxtra

คำตอบที่ยอดเยี่ยมมีประโยชน์จริงๆ ตลกแม้ว่าในสวิฟท์คุณสามารถประกาศ "var" และปล่อยให้มันเป็นฮ่าฮ่า :)

1
ทำไม int ถึง 32 บิตในโปรเซสเซอร์ 64 บิต ฉันเห็นว่ามีสิ่งที่เรียกว่า LP64 ในโปรเซสเซอร์ iphone A7 แต่ฉันไม่เข้าใจเหตุผล อาจจะเป็นเพราะความเข้ากันได้หรือสิ่งที่ล้าหลัง .... ฉันไม่รู้ มีใครรู้เหตุผลบ้าง
Ricardo

1
UINT_MAX อยู่ที่ไหน
codehearted

20

โปรดทราบว่าคุณสามารถใช้ประเภทความกว้างคงที่ C99 ได้อย่างสมบูรณ์ใน Objective-C:

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

หน้าวิกิพีเดียมีคำอธิบายที่ดีของสิ่งที่มีอยู่ในส่วนหัวนี้ถ้าคุณไม่ได้มีสำเนาของมาตรฐานซี (คุณควร แต่เนื่องจากวัตถุประสงค์ -C เป็นเพียงส่วนขยายเล็ก ๆ ของ C) คุณอาจพบส่วนหัวlimits.hและinttypes.hเป็นประโยชน์


นอกจากนี้ยังมี SInt32, UInt32 และอื่น ๆ (ใช้บ่อยใน Core Audio)
Nicolas Miari

12

อัปเดตสำหรับ arch 64 บิตใหม่

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.