BitArray を使用して、ビットだけでなくビットに値を設定するなど、最も基本的なことを行うにはどうすればよいですか? BitArray と呼ばれるこのがらくたを使用したことを後悔し始めています。
このようなビットがあるとしましょう。
public enum RULE
{
NOTHING = 0x0,
FIRST_STEP = 0x1,
FOO_YOU = 0x2,
BAR_FOO = 0x10,
FOO = 0x20,
BAR = 0x40,
FOO_BAR = 0x80,
READY = 0x100,
...//LOTS MORE BITS
FINAL_FLAG_BIT= 0x10000000 //Final bit.. uses the 29th bit.
};
今、私はこれを行うと言う..
//only use 29 bits to save memory, probably still uses 4 bytes lol.
BitArray rules= new BitArray(29);
//As you can see what I tried to do.
public bool ruleEnabled(RULE i)
{
return rules[(int)i]; //<- this is impossible as it sets BITS not bitmasks.
}
public void setRule(RULE rule, bool b) {
rules.Set((int)rule, b);
}
そのため、多くの制限の1つを知らずに、これを実装するのに約30分を無駄にしました..値にキャストする方法さえないことを知っています..CopyTo
そのため、最終的に変数を 1 つだけ使用することになり (このソリューションはよりクリーンで高速なようです)、2 つのメソッドを変更するだけsetRule
でruleEnabled
、適切に機能するようになりました。
private int rules; //uses only 29 of the 32 bits.
public bool ruleEnabled(RULE i)
{
int bits = (int)i;
return (rules & bits) == bits;
}
public void setRule(RULE rule, bool set) {
if (set)
rules |= (int)rule;
else
rules &= ~(int)rule;
}
私の質問は、私が正しいことをしたかどうかです。そして、BitArray がこれまでに役立つのはなぜですか? AND
OR
NOT
XOR
非常に多くの制限がある場合..すでに次のようなすべての操作を実行できます&
|
~
^
BitArray は、どのデータ型でも表現できるよりも多くのビットを扱う場合に最適に使用されると思います..圧縮/暗号化などのために..