【C#】ビット演算メモ

ビット演算の方法(というか記号)を忘れがちなのでメモ。

ビット演算?

そもそもビット演算とは?という話は既に素晴らしい記事があるのでリンクで済ませます。

qiita.com

ビット演算の使い方

ビット演算は下記のように使います。

using System.Collections;
using UnityEngine;

public class BitExample : MonoBehaviour {

    // ビット演算に使う場合にはSystem.Flagsアトリビュートをつける
    [System.Flags]
    public enum Example
    {
        // 1を立てるビットを一つずつずらしながら定義する
        Element0    = 1 << 0,
        Element1    = 1 << 1,
        Element2    = 1 << 2,
        Element3    = 1 << 3,
        Element4    = 1 << 4,
    }

    public void Awake()
    {
        var example     = (Example)0;
        
        // ビットを立てる
        example         |= Example.Element1;
        Debug.Log(example); // Element1

        // ビットを複数立てる
        example         |= (Example.Element1 | Example.Element3);
        Debug.Log(example); // Element1, Element3

        // ビットを消す
        example         &= ~Example.Element1;
        Debug.Log(example); // Element3

        // 判定方法: HasFlagsを使わない場合
        {
            // ビットが立っているか
            Debug.Log((example & Example.Element3) == Example.Element3);    // true

            // ビットが全て立っているか
            Debug.Log((example & (Example.Element2 | Example.Element3)) == (Example.Element2 | Example.Element3));  // false

            // ビットがいずれか立っているか
            Debug.Log((example & (Example.Element2 | Example.Element3)) != 0); // true
        }
        
        // リセット
        example         = 0;
    }
}

参考

qiita.com

qiita.com