だから、ビットフィールド。具体的には、大きなビットフィールド。ビットフィールドで個々の値を操作する方法は理解していますが、次のような大規模なセットでこれを行うにはどうすればよいでしょうか。
uint[] bitfield = new uint[4] { 0x0080000, 0x00FA3020, 0x00C8000, 0x0FF00D0 };
私が抱えている特定の問題は、配列全体を通過する左右のシフトを行うことです。たとえば、>> 4
上記の配列で a を実行すると、次のようになります。
uint[4] { 0x0008000, 0x000FA302, 0x000C800, 0x00FF00D };
さて、ここでの(過度に)単純化されたアルゴリズムは次のようになります(これは私がオンザフライでコードを書いているところです):
int shift = 4;
for (int i = 0; i <= shift; i++) {
for (int j = bitfield.GetUpperBound(0); j > 0; j--) {
bitfield[j] = bitfield[j] >> 1;
bitfield[j] = bitfield[j] + ((bitfield[j-1] & 1) << (sizeof(uint)*8));
}
bitfield[0] = bitfield[0] >> 1;
}
この種のデータの操作を容易にするものは組み込まれていますか?