我注意到当Byte加Byte时,它会产生int, 是否可以让字节a +字节b,如果溢出则产生255?
Byte a=200;
Byte b=200
Byte output = (a+b); // now output equals 144, I want 255
答案 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);