うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】ビット演算を利用したフラグ管理

FlagsAttribute を利用すると Enum をビットフラグとして利用することができる

値は1,2,4... と定義するのは面倒なので、1を何ビットシフトしたかで値を管理する

[System.Flags]
public enum Flag
{
    A = 1 << 0,
    B = 1 << 1,
    C = 1 << 2,
    // 全フラグ
    ALL = 1 << 3 - 1,
}

フラグの処理に関しては以下

フラグが立っているか

// 単一フラグ
var hasFlag = (bitFlag & Flag.A) == Flag.A;
 
// 複数フラグ
var hasFlag = (bitFlag & (Flag.A | Flag.B)) == (Flag.A || Flag.B);
 
// どれかのフラグ
var hasFlag = (bitFlag & (Flag.A | Flag.B)) != 0;

フラグを立てる

bitFlag |= Flag.A;

フラグを削除する

bitFlag &= ~Flag.A;