美文网首页
关于'<<'左移运算符

关于'<<'左移运算符

作者: Hiker5 | 来源:发表于2018-09-28 15:17 被阅读15次

    在阅读源码的过程中碰到了“7<<16”,小白,看不懂,然后去百度,知道这是左移运算符,继续看下去,发现小小的运算符里,大有学问,这里我就不一一赘述了,只是想说一些皮毛,以便记忆。在iOS的宏定义里,尤其需要注意运算符的优先级顺序。附送猫神宏定义黑魔法传送门

    运算符的优先级

    指针最优,单目运算优于双目运算。如正负号。
    先算术运算,后移位运算,最后位运算,逻辑运算最后计算。
    (位运算符:& ^ | )
    请特别注意:
    1 << 3 + 2 && 7等价于 (1 << (3 + 2))&&7.

    表达式

    单目运算 > 双目运算 > 三目运算( a ? b : c)
    指针 > 算术运算 > 位移运算 > 位运算 > 逻辑运算

    衍生问题

    从位移运算符中衍生出来的一些问题
    在计算机中,一个字节占8bit,也就是说一个字节占8位(00000000),一个汉字是2个字节,也就是占16位。而nsinteger在不同的系统中,占的位数也不同。(传送门

    在32位系统中

    int 占4个字节
    long 占4个字节
    NSInteger 是int的别名,占4个字节
    long long 占8个字节
    int32_t 是int的别名,占4个字节
    int64_t 是long long的别名,占8个字节

    在64位系统中

    int 占4个字节
    long 占8个字节
    NSInteger 是long的别名,占8个字节
    long long 占8个字节
    int32_t 是int的别名,占4个字节
    int64_t 是long long的别名,占8个字节

    由于long和NSInteger的字节数变了,在做系统兼容的时候可能会导致溢出,所以在兼容32位和64位系统,使用int, long long(或者int32_t,int64_t)这样的数据类型比使用NSInteger可靠得多。

    猫神奖励

    以下是猫神宏定义黑魔法的奖励,仅作记录,以备不时之需。

    #define NSLogRect(rect) NSLog(@"%s x:%.4f, y:%.4f, w:%.4f, h:%.4f", #rect, rect.origin.x, rect.origin.y, rect.size.width, rect.size.height)
    #define NSLogSize(size) NSLog(@"%s w:%.4f, h:%.4f", #size, size.width, size.height)
    #define NSLogPoint(point) NSLog(@"%s x:%.4f, y:%.4f", #point, point.x, point.y)
    

    相关文章

      网友评论

          本文标题:关于'<<'左移运算符

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