c#字节添加溢出

本文关键字:溢出 添加 字节 | 更新日期: 2023-09-27 18:07:09

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

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

c#字节添加溢出

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

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

这通常发生在非 checked语句中的数字溢出时。

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

byte output = (int)a + (int)b > byte.MaxValue ? byte.MaxValue : a + b;
我能想到的另一个选择是创建您自己的数据类型,为您处理这些

由于a + bint类型,您可以轻松检查:

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

这会抛出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);

但是我建议你自己控制你的心流。捕获异常是一种糟糕的方法,但如果您有复杂的计算,它可能会很麻烦。用Math代替:

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