Ich schreibe ein zeitkritisches Stück Code in C#, das erfordert, dass ich zwei vorzeichenlose Ganzzahlen konvertieren, die einen inklusiven Bereich in ein Bitfeld definieren. Ex:Konvertieren eines Bereichs in ein Bit-Array
uint x1 = 3;
uint x2 = 9;
//defines the range [3-9]
// 98 7654 3
//must be converted to: 0000 0011 1111 1000
Es kann helfen, die Bits in umgekehrter Reihenfolge
Der Maximalwert für diesen Bereich sichtbar zu machen ist ein Parameter zur Laufzeit gegeben, die wir max_val
nennen wollen. Daher sollte das Bitfeld Variable als UInt32
Array mit einer Größe gleich max_val/32
definiert werden:
UInt32 MAX_DIV_32 = max_val/32;
UInt32[] bitArray = new UInt32[MAX_DIV_32];
Bei einer Reihe von Variablen definiert x1
und x2
, was ist der schnellste Weg, um diese Umwandlung durchzuführen?
Sie den meisten Fällen haben MAX_VAL> = 32? Sonst wäre es nicht sinnvoll, ein Array zu verwenden. Wenn ja, dann nehme ich an, Sie wollen sagen können, ich brauche 200 Bits, die auf 1 gesetzt sind, mit einer Auffüllung von 100 Bits, die rechts auf 0 gesetzt sind. – Samuel
Wenn Ihr max_val nicht durch 32 teilbar ist, werden Ihrem BitArray einige Bits fehlen. –
Samuel - nicht sicher, was Sie bekommen. Jim - Yep, ich weiß und das ist völlig in Ordnung. – JubJub