經常看到一些系統的源碼或者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 關注
- 393 瀏覽
添加回答
舉報
0/150
提交
取消