android源码中&运算符的妙用

祭出代码:

 uint32_t device2 = AUDIO_DEVICE_NONE;
if (device2 == AUDIO_DEVICE_NONE) {
            device2 = availableOutputDevicesType & AUDIO_DEVICE_OUT_WIRED_HEADSET;
}

AUDIO_DEVICE_OUT_WIRED_HEADSET             = 0x4,

某一时刻。availableOutputDevicesType的值为65699

转换成二进制之后是:10000000000100001

每一个有1的位置都代表一种可用的输出设备,比如SPEAKER(扬声器),蓝牙耳机,有线耳机等等。

availableOutputDevicesType的意思就是针对手机来说,目前可以用来做声音输出的设备有哪些。

device2 = availableOutputDevicesType & AUDIO_DEVICE_OUT_WIRED_HEADSET;
这行代码的意思:

1.0x4 & 10000000000100001 

意思就是判断AUDIO_DEVICE_OUT_WIRED_HEADSET这种设备是否在availableOutputDevicesType里头,是否是可用的。

如果可用呢,结果就是AUDIO_DEVICE_OUT_WIRED_HEADSET,如果不可用,结果就是0.


在学到这个巧妙的技法之前,我最愚蠢写法可能是:

设备类型用枚举,然后专门定义个数组来存储当前可用的设备。判断时候用for循环挨个比较。。。

说起来都烦。这种写法实在是精妙!!!


android源码里头有大量的这种写法,用位来标记各种属性。

都不知道怎么结尾了,就这么地吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值