我一直想知道在C#中反转BitArray顺序的最有效方法是什么.要清楚,我不想通过调用.Not()来反转Bitarray,我想要反转数组中位的顺序.
干杯,克里斯
Tim*_*oyd 28
public void Reverse(BitArray array)
{
int length = array.Length;
int mid = (length / 2);
for (int i = 0; i < mid; i++)
{
bool bit = array[i];
array[i] = array[length - i - 1];
array[length - i - 1] = bit;
}
}
Run Code Online (Sandbox Code Playgroud)
对于长数组和相对较少的用途,只需将其包装:
class BitArrayReverse
{
private BitArray _ba;
public BitArrayReverse(BitArray ba) { _ba = ba; }
public bool this[int index]
{
get { return _ba[_ba.Length - 1 - index]; }
set { _ba[_ba.Length - 1 - index] = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
这将是在 for 循环中使用 XOR 反转任何长度的 MSB <-> LSB 的最佳方法
public static BitArray BitsReverse(BitArray bits)
{
int len = bits.Count;
BitArray a = new BitArray(bits);
BitArray b = new BitArray(bits);
for (int i = 0, j = len-1; i < len; ++i, --j)
{
a[i] = a[i] ^ b[j];
b[j] = a[i] ^ b[j];
a[i] = a[i] ^ b[j];
}
return a;
}
// in 010000011010000011100b
// out 001110000010110000010b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10914 次 |
| 最近记录: |