【问题标题】:Types in Objective-C on iOSiOS 上 Objective-C 中的类型
【发布时间】:2011-01-07 15:08:02
【问题描述】:

我想问一下 iOS 上 Objective-C 中的基本数据类型。

我需要表示变量的大小和变量的范围。 所以在例子中: short int - 2 个字节 - 有符号:-32768 到 32767 和无符号:0 到 65535 这只是一个例子。

【问题讨论】:

标签: ios objective-c


【解决方案1】:

这是一个很好的概述:

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

【讨论】:

  • 请注意,随着 iOS 7 SDK 的发布,一些类型在 64 位模式下更大。
  • 已针对 64 位进程更新
  • 很棒的答案真的很有帮助。不过有趣的是,在 Swift 中,你可以只声明一个“var”并将其保留在那个位置,哈哈 :)
  • 为什么 int 在 64 位处理器中是 32 位?我看到 A7 iphone 处理器中有一个叫做 LP64 的东西,但我不明白原因。也许是为了向后兼容或遗留......我不知道。有谁知道原因吗?
  • UINT_MAX 在哪里?
【解决方案2】:

请注意,您也可以在 Objective-C 中完美地使用 C99 固定宽度类型:

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

如果您没有 C 标准的副本,wikipedia page 可以很好地描述此标头中可用的内容(不过,您应该这样做,因为 Objective-C 只是 C 的一个微小扩展)。您可能还会发现标题 limits.hinttypes.h 很有用。

【讨论】:

  • 还有SInt32、UInt32等(在Core Audio中用的比较多)。
【解决方案3】:

新的 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

【讨论】:

    猜你喜欢
    • 2011-10-08
    • 2011-04-02
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2012-09-16
    • 1970-01-01
    相关资源
    最近更新 更多