c# - C# 中的位域

标签 c# data-structures bit-manipulation bit-fields

所以,位域。具体来说,大位域。我了解如何在位域中操作单个值,但我将如何在大型集合上执行此操作,例如:

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 值?它使用 bool 值来表示 API 方面的位,但我相信它在幕后使用了 int[]。

关于c# - C# 中的位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/178188/

相关文章:

c# - 将程序集加载到安全性较低的应用程序域中

c - C中的链表结构与读取txt

ios - 在 swift : Difference between Array VS NSArray VS [AnyObject]

java - 节点和树结构有问题(引用/空指针)

c++ - 将位数据输出到二进制文件C++

c# - 如何在asp.net核心 Razor 页面MVVM之间传递或引用模型

c# - WebSuperGoo.ABCpdf8

c# - 对绑定(bind)到 Linq 查询的 GridView 进行排序

c++ - 使用按位运算符和 bool 逻辑的绝对值 abs(x)

python - 按位运算和使用