Android源码中的位运算

在看Android源码的时候经常可以看到 |=、&、~这样的符号,对于科班的人来说一般都会认识这些符号啦,就是位运算符嘛,但是现在对于非科班的就会有点蒙圈了,因为我们在学习的时候经常用的是&&、|| 这样的,但是它们变成单个去用的却几乎没遇到过,其实这种也是理解起来也是很简单的,因为这些符号就是将我们的常用运算转化成为二进制来进行运算的,目的就是为了加快运算速率,因为我们现在用的计算机系统使用的基本上都是二进制系统。

简单的了解一下位运算符

& 位与,运算过程就是先将我们的十进制数转换成二进制,然后进行同位“与”比较,如果相同位上的都是1,那么得出的结果这个位上就是1,否则这个位上就是0

| 位或,当然也是十进制先转换成二进制,然后进行同位“或”比较,如果相同位上的有一个是1,那么就是1,其余情况就是0

^ 异或,十进制转二进制~然后同位“异或”比较,如果相同位上的值相同,结果为0,不相同为1

~ 按位取反,十进制转成二进制,不过这个有点特殊,不能当作运算符来使用,只能对某个值进行按位取反操作,也就是同位1变成0,0变成1;使用这个去反过后,我们就能够得到这个数的相反数-1,因为我们使用的计算机是以补码存数据,正数补码是本身,负数补码是取反加1。

下面说一下我在查看源码中遇到的一些二进制运算。

举个栗子:

声明两个变量:

private int mFlag;
private int FLAG_1 = 2;

最常见的就是:(mFlag |= FLAG_1), 代表为mFlag添加FLAG_1属性,换算成十进制和mFlag+=FLAG_1得到的结果是一样的

经常会看到这种判断:(mFlag & FLAG_1)!= 0 ,代表如果已经将FLAG_1 通过这样 “|=” 赋给 mFlag,则 mFlag & FLAG_1 = mFlag,否则 mFlag & FLAG_1 = 0

还有这种运算:mFlag &= ~FLAG_1 ,代表如果已经将 FLAG_1 |= 赋给 mFlag,则减去FLAG_1,如果没有则mFlag的值不变

说白了,其实二进制也没有那么难嘛,短除法大家应该都会,只不过可能我们不能心算二进制罢了,多来几张纸就行了:)



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值