自定义无符号整数限制和翻转

时间:2015-05-07 00:37:41

标签: c#

我目前需要在C#中使用特殊的数据类型。我需要数据类型是一个整数,可以保持0-151之间的值。我已经知道我可以钳制最小和最大频谱,但我希望它是一个翻转特征而不是限制钳位,有点像无符号整数在它击中它时回绕到0的方式。限制。我无法弄清楚的一件事是如何处理溢出。我的意思是这样的:假设值为150并且I + = 5.该值将回绕到零,然后添加余数,即4.如果计算量太大,我该怎么做?

你会如何实现这个?

3 个答案:

答案 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可能是最佳选择。