编程语言
首页 > 编程语言> > C#中的位域

C#中的位域

作者:互联网

所以,bitfields.具体来说,是大位域.我理解如何操作位域中的单个值,但是如何在大型集合上执行此操作,例如:

uint[] bitfield = new uint[4] { 0x0080000, 0x00FA3020, 0x00C8000, 0x0FF00D0 };

我遇到的具体问题是在整个阵列中进行左右移位.例如,如果我做了>>在上面的数组4中,我最终得到:

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;
}

是否内置了可以轻松处理此类数据的内容?

解决方法:

是什么让你认为BitArray在内部使用bool?它使用布尔值来表示API方面的位,但我认为它使用了int [].

标签:c,bit-manipulation,data-structures,bit-fields
来源: https://codeday.me/bug/20190701/1345324.html