我需要在C#中提供一些帮助.
我需要在C#中开发一个模块,它会消耗大量的CPU和RAM,每一位都算!
我想创建一个包含结构的列表,其中一个字段将是一个自定义的整数.
整数只能是0,1,2(二进制:00,01,10) - 因此我不需要大于2位的整数.
这比最小的内置整数字节更好,它有8位.
我需要新的整数作为常规整数,所以当我尝试进行简单的值赋值或任何简单的算术计算时,我不需要使用强制转换(非常昂贵)或任何其他特殊操作.
如果你可以请给我写一个简短的结构或者引用我类似的实现我会非常感谢
非常感谢
有没有办法为我在结构中定义自定义整数,而不更改主程序中的其余代码?
"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));
}
}
}
Run Code Online (Sandbox Code Playgroud)