int/otherデータ型にフラグが存在するかどうかを確認するために通常使用されるメソッドがありますか?フラグが存在するかビット単位でチェックする
if ((host&flagtocheckfor)==flagtocheckfor)
これはうまくいきますが、これはフラグを設定する一般的な方法ですが、これはフラグが通常チェックされる方法ですか?または、より簡潔な方法がありますか?
int/otherデータ型にフラグが存在するかどうかを確認するために通常使用されるメソッドがありますか?フラグが存在するかビット単位でチェックする
if ((host&flagtocheckfor)==flagtocheckfor)
これはうまくいきますが、これはフラグを設定する一般的な方法ですが、これはフラグが通常チェックされる方法ですか?または、より簡潔な方法がありますか?
これはかなりうまいです。正確にはウェイビットフラグは、それらをサポートするほとんどの言語でチェックされています。例えば
:
場合 のいずれか、それはtrueを返しますので、実際には第二のために動作しませんif ((flag & BIT_7) != 0) ...
:
#define BIT_7 0x80
#define BITS_0_AND_1 0x03
if ((flag & BIT_7) == BIT_7) ...
if ((flag & BITS_0_AND_1) == BITS_0_AND_1) ...
あなたが最初のようなものを確認することができますがビットは、ではなく、設定されます。完全のために
、Cはあなたとビットマスクを設定することができます:あなたがそれらをクリアすることができます
flag = flag | BIT_7; // or you can also use 'flag |= BIT_7'
:
flag = flag & (~BIT_7);
そしてそれらを切り替える:
flag = flag^BIT_7;
Aha-ありがとう、私は確信が持てませんでした。 – ultifinitus
ます== flagtocheckforの部分は必要ありません。 &の結果は0(ビットがオフ)または0(ビットがオン)であり、Cでは少なくともFalseおよびTrueに対応しています。 – librik
@librik、それはシングルビットマスクでは問題ありませんが、マルチビットでも可能です。私の答えを見てください。 – paxdiablo