android源码中&运算符的妙用
2016-07-01 18:20
435 查看
祭出代码:
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源码里头有大量的这种写法,用位来标记各种属性。
都不知道怎么结尾了,就这么地吧。
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源码里头有大量的这种写法,用位来标记各种属性。
都不知道怎么结尾了,就这么地吧。
相关文章推荐
- 在Android Studio进行“简单配置”单元测试(Android Junit)
- Android java传递int类型数据给C
- android xml布局文件中使用RelativeLayout,明明有这个id,却提示找不到---->解决办法
- Android - Bmob 读取存储数据
- android xml布局文件中使用RelativeLayout,明明有这个id,却提示找不到---->解决办法
- Android 的 Notification 使用总结
- Android开发笔记——图片缓存、手势及OOM分析
- Android编译系统详解(三)
- android recyclerView Binary XML file line #7: Error inflating class android.support.v7.widget.Recycl
- Android Crush之Native Crush分析
- Android编译系统详解(二)
- Suggestion: add 'tools:replace="android:icon"' to element
- android-----事件分发机制测试系列(四)
- Android 编程下的 TraceView 简介及其案例实战
- android之listview的item不可点击
- android java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout
- 15 个 Android 通用流行框架大全
- 自定义控件shape详解
- MPAndroidChart之柱状图开发总结
- Android DiskLruCache