iOS中CGFloat、NSInteger、NSUInteger的别名
- CGFloat为double或float的typedef(别名)
- NSInteger为long或int的typedef(别名)
- NSUInteger为unsigned long或unsigned int的typedef(别名)
typedef float CGFloat;
// 32-bit
typedef double CGFloat;
// 64-bit
1??在32位系统下, CGFLOAT是float类型2. NSInteger
float: 4个字节
double: 8个字节
2??在64位系统下, CGFLOAT是double类型
float: 4个字节
double: 8个字节
typedef int NSInteger;
// 32-bit
typedef long NSInteger;
// 64-bit
NSInteger是一个封装,它会识别当前操作系统的位数,自动返回最大的类型注:
1??在32位系统下,NSInteger为int:
int 占4个字节
long 占4个字节
NSInteger 是int的别名,占4个字节
long long 占8个字节
int32_t 是int的别名,占4个字节
int64_t 是long long的别名,占8个字节
2??在64位系统下,NSInteger为long:
int 占4个字节
long 占8个字节
NSInteger 是long的别名,占8个字节
long long 占8个字节
int32_t 是int的别名,占4个字节
int64_t 是long long的别名,占8个字节
32位程序:NSInteger相当于int32_t,4个字节为int的别名。
64位程序:NSInteger相当于int64_t,8个字节为long long的别名。
int的范围是:-2147483648~2147483647(-2^32 ~ 2^32-1)。可以表示到10位数,再大就不行了。long long的范围是:-9223372036854775808~9223372036854775807(-2^64 ~ 2^64-1)。可以表示到19位,位数已经很大,一般都够用了。
在类型转换的时候
例如:int64_t转换成NSInteger,在64位系统中是正常的
但在32位系统中就可能会导致溢出
对于一个11位的整数,它在64位系统中使用NSInteger或者long类型(占8字节),是可以正常存储的;如果是在32位系统中,它就溢出了(占4字节)
3. NSUInteger
typedef unsigned int NSUInteger;
// 32-bit
typedef unsigned long NSUInteger;
// 64-bit
unsigned 是无符号的意思 : NSUInteger是无符号的,即没有负数;NSInteger是有符号的。所以NSUInteger类型不能给它赋负值。4. char
1??在32位系统下
unsigned int : 4个字节
unsigned long: 4个字节
2??在64位系统下
unsigned int : 4个字节
unsigned long: 8个字节
【iOS中CGFloat、NSInteger、NSUInteger的别名】1??在32位系统下
char :1个字节
2??在64位系统下
char :1个字节
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理