我目前在C#中需要特殊的数据类型。我需要的数据类型是一个可以容纳0-151之间的值的整数。我已经知道我可以钳制最小和最大频谱,但是我希望它是一个翻转功能,而不是一个限幅钳制,就像一个无符号整数在达到极限时回绕到0一样。我不知道的一件事是如何处理溢出。我的意思是这样的:假设值是150,而I + =5。该值将回绕为零,然后加上余数,即4。如何做到这一点而又不会在计算上太昂贵?
您将如何实施?
最佳答案
我将在结构中包装模151(% 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);
输出:
4
150
149