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)