关于'<<'左移运算符
在阅读源码的过程中碰到了“7<<16”,小白,看不懂,然后去百度,知道这是左移运算符,继续看下去,发现小小的运算符里,大有学问,这里我就不一一赘述了,只是想说一些皮毛,以便记忆。在iOS的宏定义里,尤其需要注意运算符的优先级顺序。附送 猫神宏定义黑魔法传送门 。
指针最优,单目运算优于双目运算。如正负号。
先算术运算,后移位运算,最后位运算,逻辑运算最后计算。
(位运算符:& ^ | )
请特别注意:
1 << 3 + 2 && 7等价于 (1 << (3 + 2))&&7.
单目运算 > 双目运算 > 三目运算( a ? b : c)
指针 > 算术运算 > 位移运算 > 位运算 > 逻辑运算
从位移运算符中衍生出来的一些问题
在计算机中,一个字节占8bit,也就是说一个字节占8位(00000000),一个汉字是2个字节,也就是占16位。而nsinteger在不同的系统中,占的位数也不同。( 传送门 )
int 占4个字节
long 占4个字节
NSInteger 是int的别名,占4个字节
long long 占8个字节
int32_t 是int的别名,占4个字节
int64_t 是long long的别名,占8个字节
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可靠得多。
以下是猫神 宏定义黑魔法 的奖励,仅作记录,以备不时之需。