2

intタイプ、ab、および フラグの 2 つの変数があるとしFます。

#define F <something>

int a = <something> ;
int b = <something> ;

aとの両方がフラグ をb持っているか、フラグを持っていないかをテストする簡単な方法は何Fですか?

両方がそれを持っているかどうかをテストするには、次のようなものを使用できます。

if ( a & b & F )

それらのどれも持っていないかどうかをテストするには、次のようなものを使用できます。

if ( !((a & F) || (b & F)) )

そして、テスト全体は次のようになります。

if ( (a & b & F) &&  !((a & F) || (b & F)) )

しかし、これは長すぎて複雑すぎるように見えます。もっと簡単な解決策はありますか?

4

3 に答える 3

3

「誰も持っていない」というテストは、

!((a | b) & F)

フラグをマージし、ロジックをマスクして反転します。


テスト全体は xor を使用して記述できます。(アイデアを提供してくれた Martin James に感謝)

!((a ^ b) & F)

これは、「ない (正確に 1 つaまたはbを持っているF)」という意味です。

于 2017-08-19T13:04:17.620 に答える