フラグアップ、フラグダウン、マクロ #define C言語

どもども、dです。
最近、ちょっと疑問が・・・、やはりビット演算は慣れるまで難Cのです。
前回の苦闘はd:id:studiokingyo:20040522ですが、

今回は、ビット入れ替えではなくフラグアップダウンについての苦闘です。

今、こんな感じでフラグアップ、ダウンのマクロを実装しています・・・。(うわ〜。だせぇ。


///スマン、こんなダサい実装で・・・。
#define DKUTIL_FLAG_DOWN(x,n) {(x & n) ? x |= (x^n) : 0;}//{x |= (x^n);}
///フラグアップマクロ。これは常識。
#define DKUTIL_FLAG_UP(x,n) {x |= n;}

実の所・・・、私、これしかやっぱり思いつかないです・・・。
テストの通り、数学的思考能力が弱いらしい。(´Д⊂グスン
三項演算子もif文も使わないで、ビット演算だけでフラグダウンの処理は記述できないだろうか?
どうか、皆様、公式がありましたら是非、コメントやメール、お待ちしております。m(_ _)m