请教一下关于|和&的使用

经常看到一些系统的源码或者c的源码,如下:

#define R 1
#define B 2
#define C 4
#define D 8

run_some_function(R|B|C);

定义的时候均使用了2的某次方,使用的时候,使用|或者&组合,有哪位大神能详细讲解一下这里面的原理么?

FFIVE
浏览 382回答 2
2回答

波斯汪

补充楼上这种二进制且(&)或(|)的操作是在设置标志位(flag)通过楼上你可以发现 0-f 每个数都可以看做是四位二进制通过不同数字的且或操作 会映射到一个最终的四位二进制上即这个二进制串上哪些位是0 哪些是1 比如说我们规定 _ _0位定义为选项A1位定义为选项B... 那么0100的意思就是 只打开选项B 其他保持关闭 所以只要设计好某个十六进制/十进制数对应的开关意思那么你对它们的任意组合到最后都可以被作为一个二进制串去解析你打开了哪些标志位

慕码人8056858

1 00012 00104 01008 1000 0001 | 0010 = 0011 后面不用我说了吧! 补全吧还是 1 00012 00103 00114 01005 01016 01107 01118 10009 1001a 1010b 1011c 1100d 1101e 1110f 1111
打开App,查看更多内容
随时随地看视频慕课网APP