iOS 在32位和64位下,数据类型占用字节

32位编译器

char :1个字节

char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)

short int : 2个字节

int:  4个字节                        范围  -2147483648~2147483647

unsigned int : 4个字节

long:  4个字节                         范围 和int一样

long long:  8个字节                 范围  -9223372036854775808~9223372036854775807

unsigned long long:  8个字节    最大值:1844674407370955161

float:  4个字节

double:  8个字节


64位编译器

char :1个字节

char*(即指针变量): 8个字节

short int : 2个字节

int:  4个字节                      范围  -2147483648~2147483647

unsigned int : 4个字节

long:  8个字节                     范围  -9223372036854775808~9223372036854775807

long long:  8个字节            范围  -9223372036854775808~9223372036854775807

unsigned long long:  8个字节    最大值:1844674407370955161

float:  4个字节

double:  8个字节

注意:64bit和32bit下  long 和char*所占字节是不同的

4个字节的最大范围是4294967295, int只是占四个字节 不能用int来存储四个字节的数,要不然会越界


int与NSInteger区别

在苹果的api实现中,NSInteger是一个封装,它会识别当前操作系统的位数,自动返回最大的类型。

定义的代码类似于下:

ifLP64|| TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64

typedef long NSInteger;

typedef unsigned long NSUInteger;

else

typedef int NSInteger;

typedef unsigned int NSUInteger;

endif

NSInteger与int的区别是NSInteger会根据系统的位数(32or64)自动选择int的最大数值(int or long)

你可能感兴趣的:(iOS 在32位和64位下,数据类型占用字节)