美文网首页
iOS中CGFloat、NSInteger、NSUInteger

iOS中CGFloat、NSInteger、NSUInteger

作者: coming_168 | 来源:发表于2019-06-28 10:12 被阅读0次
    • CGFloatdoublefloat的typedef(别名)
    • NSIntegerlongint的typedef(别名)
    • NSUIntegerunsigned longunsigned int的typedef(别名)

    1. CGFLOAT

    typedef float CGFloat;   // 32-bit
    typedef double CGFloat;  // 64-bit
    

    1⃣️在32位系统下, CGFLOAT是float类型
    float: 4个字节
    double: 8个字节
    2⃣️在64位系统下, CGFLOAT是double类型
    float: 4个字节
    double: 8个字节

    2. NSInteger

    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类型不能给它赋负值。
    1⃣️在32位系统下
    unsigned int : 4个字节
    unsigned long: 4个字节
    2⃣️在64位系统下
    unsigned int : 4个字节
    unsigned long: 8个字节

    4. char

    1⃣️在32位系统下
    char :1个字节
    2⃣️在64位系统下
    char :1个字节

    相关文章

      网友评论

          本文标题:iOS中CGFloat、NSInteger、NSUInteger

          本文链接:https://www.haomeiwen.com/subject/swzjcctx.html