BitArrayを使用して最も基本的なものをいくつか行うにはどうすればいいですか?私はこれまで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);
}
だから私は...あなたもありません、それをキャストする方法を知っていることの一つは、多くの制限です知らなくても、これを実装する約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が最もよく使用されていると思い、その後任意のデータ型を表すことができます。 。圧縮/暗号化など。
あなたは今かなり理解しているようです。 –
Meh yeah私はこの質問を投稿した後、BitArrayを完全に削除しました。しかし、これは、この質問に取り組んでいる人を助けることができ、うまくいけばBitArrayに苦労しています。 – SSpoke