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()); }
はい、まったく実装されていませんw