关于'<<'左移运算符

 我来答
机器1718
2022-08-01 · TA获得超过6838个赞
知道小有建树答主
回答量:2805
采纳率:99%
帮助的人:161万
展开全部

在阅读源码的过程中碰到了“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可靠得多。

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式