我目前需要在C#中使用特殊的数据类型。我需要数据类型是一个整数,可以保持0-151之间的值。我已经知道我可以钳制最小和最大频谱,但我希望它是一个翻转特征而不是限制钳位,有点像无符号整数在它击中它时回绕到0的方式。限制。我无法弄清楚的一件事是如何处理溢出。我的意思是这样的:假设值为150并且I + = 5.该值将回绕到零,然后添加余数,即4.如果计算量太大,我该怎么做?
你会如何实现这个?
答案 0 :(得分:4)
总结,然后执行% 151
。
x += 5
实现为
x = (x + 5) % 151
答案 1 :(得分:3)
我会在一个结构中包含一个模151(Chore
),并声明如下:
% 151
示例运行:
struct UIntCustom {
public uint Value { get; private set; }
public UIntCustom(uint value) : this() {
Value = value % 151;
}
public static UIntCustom operator +(UIntCustom left, UIntCustom right) {
return new UIntCustom(left.Value + right.Value);
}
public static UIntCustom operator -(UIntCustom left, UIntCustom right) {
return new UIntCustom(left.Value - right.Value);
}
// and so on
public static explicit operator UIntCustom (uint c) {
return new UIntCustom(c);
}
}
输出:
UIntCustom c = new UIntCustom(4);
Console.WriteLine(c.Value);
c -= (UIntCustom) 9;
Console.WriteLine(c.Value);
c += (UIntCustom) 150;
Console.WriteLine(c.Value);
答案 2 :(得分:2)
声明一个新的结构和operator overloading可能是最佳选择。