我目前在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

10-08 02:15