Code: Select all
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.
};
< /code>
Sagen Sie jetzt, ich mache das .. < /p>
//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]; //
Ich habe also ungefähr 30 Minuten damit verschwendet, dies zu implementieren, ohne eine dieser Einschränkungen zu kennen. Sie wissen, dass es nicht einmal eine Möglichkeit gibt, sie auf den Wert zu werfen. Ohne CopyTO
habe ich also nur 1 Variable verwendet (scheinen diese Lösung sowohl sauberer als auch schneller) und musste nur 2 Methoden SetRule damit ordnungsgemäß funktioniert. < /p>
Code: Select all
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;
}
< /code>
Meine Frage ist, dass ich das Richtige getan habe? Und warum ist der Bitarray jemals nützlich? Wenn es so viele Einschränkungen gibt, können Sie alle Vorgänge wie und
Ich denke, Bitarray wird am besten verwendet, wenn Sie mit mehr Bits zu tun haben, dann kann jeder Datentypen .. für Kompressionen/Verschlüsse usw. darstellen. .