经常看到一些系统的源码或者c的源码,如下:
#define R 1
#define B 2
#define C 4
#define D 8
run_some_function(R|B|C);
定义的时候均使用了2的某次方,使用的时候,使用|或者&组合,有哪位大神能详细讲解一下这里面的原理么?
2 回答
波斯汪
TA贡献1811条经验 获得超4个赞
补充楼上
这种二进制且(&)或(|)的操作是在设置标志位(flag)
通过楼上你可以发现 0-f 每个数都可以看做是四位二进制
通过不同数字的且或操作 会映射到一个最终的四位二进制上
即这个二进制串上哪些位是0 哪些是1
比如说
我们规定
_ _
0位定义为选项A
1位定义为选项B
...
那么
0100
的意思就是 只打开选项B 其他保持关闭
所以只要设计好某个十六进制/十进制数对应的开关意思
那么你对它们的任意组合到最后都可以被作为一个二进制串去解析你打开了哪些标志位
慕码人8056858
TA贡献1803条经验 获得超6个赞
1 0001
2 0010
4 0100
8 1000
0001 | 0010 = 0011
后面不用我说了吧!
补全吧还是
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
a 1010
b 1011
c 1100
d 1101
e 1110
f 1111
- 2 回答
- 0 关注
- 381 浏览
添加回答
举报
0/150
提交
取消