補数が関係してくるのはbit演算のうち否定演算

では、
& 論理積
| 論理和
これらはどう使われるのか

まだ学んでいないので想像でしかないんだけど、例えばこんな感じなのか

絵がいくつかあって
A,B,Cと名前を付けるとする
これらの絵は4色の絵の具(赤・青・緑・黒)を使って描かれているのだが
全ての色を使っているわけではない
どの色を使っているかによって場合分けして処理していきたい

このような処理をするときに、ある工夫をしてみる

まず色ごとに特定の2進数を割り当てる(()内は10進数)

int r = 0b0001; //赤(1)
int g = 0b0010; //緑(2)
int b = 0b0100; //青(4)
int w = 0b1000; //白(8)

見て分かるように1をずらしただけのものだ
スイッチのように考える
一番右のスイッチがONのものは赤、みたいな感じ

そして絵A・B・Cについても2進数で表現する
このとき、それぞれの絵がどの色を使っているかによってスイッチON/OFFを切り替える

int artA = 0b0011; //A(3) 緑と赤を使用
int artB = 0b1001; //B(9) 白と赤を使用
int artC = 0b1111; //C(15) 全色使用

前提はここまでで、具体的にこれらをどうつかっていくかを説明(想像)する
例えば、絵Aが赤の絵の具を使っているかどうかによって条件分岐させたいならこうする

if ((artA & r) == 0b0001) { }

絵Aと絵Bで使っている色を全部列挙したいなら

int result = artA | artB;

としてから result について分析すれば分かるだろう
分析方法を想像すると・・・
if ((result & w) == w) { } //白を使っている

みたいな感じか
似たようなことがTCP/IPの本を読んだときも書いてあったような気がする