0

我需要 C# 方面的帮助。
我需要用 C# 开发一个模块,它会消耗大量 CPU 和 RAM,每一点都很重要!!
我想创建一个包含结构的列表,其中一个字段将是自定义整数。
整数只能是 0,1,2(二进制:00,01,10) - 所以我不需要大于 2 位的整数。
这比具有 8 位的最小内置整数字节更可取。
我需要新整数作为常规整数起作用,所以当我尝试进行简单的赋值或任何简单的算术计算时,我不需要使用强制转换(非常昂贵)或任何其他特殊操作。
有没有办法让我在结构中定义自定义整数,而不更改主程序中的其余代码?
如果您可以请给我写一个简短的结构或将我推荐给类似的实现,我将不胜感激
非常感谢

4

1 回答 1

5

“ushort,有 4 位”

不,ushort 是 16 位。一个字节是最小的,有 8 位。

“有没有办法让我在结构中定义自定义整数,而无需更改主程序中的其余代码?”

不,您不能创建小于一个字节的结构,因此要创建仅使用两位的整数,您必须更改保存它们的集合,以便它可以在单个字节中存储多个值。

就像是:

public class TwoBitArray {

  private int _len;
  private byte[] _data;

  public TwoBitArray(int size) {
    _len = size;
    _data = new byte[(size + 3) / 4];
  }

  public int this[int index] {
    get {
      if (index < 0 || index >= _len) throw new IndexOutOfRangeException();
      int ofs = index / 4;
      int shift = (index & 3) * 2;
      return (_data[ofs] >> shift) & 3;
    }
    set {
      if (index < 0 || index >= _len) throw new IndexOutOfRangeException();
      if (value < 0 || value > 3) throw new ArgumentOutOfRangeException();
      int ofs = index / 4;
      int shift = (index & 3) * 2;
      int mask = 3 << shift;
      _data[ofs] = (byte)((_data[ofs] & (255 - mask)) | (value << shift));
    }
  }

}
于 2013-07-07T23:19:08.633 回答