読者です 読者をやめる 読者になる 読者になる

hayateasdf's blog

C#,javascript,pythonなどいろいろ。広く浅く

C# bitset

C#でbitsetを使いたいなと思ったのですがなかったので適当にネットで調べてみたら、C++でbitsetを自作されていたみたいなので、ちょっとパクってC#で作ってみた。

// ---------------------------------------------
// BitSetTest.cs
// ---------------------------------------------
class BitSetTest
{
    //32bitのみ
    private int bit_;
    
    public BitSetTest() { bit_ = 0; }
    public void Set(int pos, bool val)
    {
        if (pos >= 32 || pos < 0) return;
            
        if (val)
            bit_ |= (1 << pos);
        else
            bit_ &= ~(1 << pos);
    }
    public void Set(int pos)
    {
        if (pos >= 32 || pos < 0) return;

        bit_ |= (1 << pos);
    }
    public bool Check(int pos)
    {
        if (pos >= 32 || pos < 0) return false; //throw new Exception();
       return (((bit_ >> pos) & 0x1) == 1) ? true : false;
    }
    public override string ToString()
    {
        string str = "";
        for (int i = 1; i <= 32; ++i)
        {
            int val = (1 << 32 - i);
            int a = (bit_ & val);
            if (a == 0)
                str += "0";
            else
                str += "1";
        }
        return str;
    }
    // ↓最後らへんのbitまで使うと、int.Parseで値オーバーするから残念ながら未完成
    //public override string ToString()
    //{
    //    string s = Convert.ToString(bit_, 2);
    //    int hoge = int.Parse(s);
    //    return String.Format("{0:D32}", hoge);
    //}
}
// ---------------------------------------------
// main.cs
// ---------------------------------------------
static void Main(string[] args)
{
    BitSetTest tes = new BitSetTest();
    tes.Set(0);
    tes.Set(1);
    tes.Set(2);
    tes.Set(2, false);
    tes.Set(5);
    Console.WriteLine(tes.Check(0));
    Console.WriteLine(tes.Check(1));
    Console.WriteLine(tes.Check(2));
    Console.WriteLine(tes.Check(3));
    Console.WriteLine(tes.Check(4));
    Console.WriteLine(tes.Check(5));
    Console.WriteLine(tes.ToString());
}


f:id:hayateasdf:20140228154604p:plain


はい、まったく実装されていませんw