C#字节加法溢出?

时间:2016-09-16 06:57:30

标签: c# byte

我注意到当Byte加Byte时,它会产生int, 是否可以让字节a +字节b,如果溢出则产生255?

Byte a=200;
Byte b=200
Byte output = (a+b); // now output equals 144, I want 255

4 个答案:

答案 0 :(得分:6)

这个(未经测试)怎么样?

byte output = (byte)(Math.Min(a + b, Byte.MaxValue));

答案 1 :(得分:1)

当数字溢出而不是checked statement时,通常会发生这种情况。

如果你想要它产生255,那么我能想到的最简单的选择就是使用三元运算:

byte output = (int)a + (int)b > byte.MaxValue ? byte.MaxValue : a + b;

我能想到的另一个选择是创建自己的数据类型来处理这个问题。

答案 2 :(得分:1)

由于a + b的类型为int,因此您可以轻松查看:

  Byte a = 200;
  Byte b = 200

  byte result = a + b > byte.MaxValue ? byte.MaxValue : (byte) (a + b);

答案 3 :(得分:0)

这将抛出OverflowException:

checked
{
    Byte a=200;
    Byte b=200
    Byte output = (a+b);
}

这样你就可以捕捉并处理它:

Byte output;
try
{
    checked
    {
        Byte a=200;
        Byte b=200
        output = (a+b);
    }
}
catch(OverflowException e)
{
    output = Byte.MaxValue;
}
Console.WriteLine(output);

但我建议你自己控制自己的流量。捕获异常是不好的方法,但如果你有复杂的计算,那可能会很麻烦。只需使用数学:

var output = (Byte)Math.Min((int)a+b, Byte.MaxValue);