byte+byte=未知结果



你好,SO!我试图添加两个字节的变量,但注意到了奇怪的结果。

byte valueA = 255;
byte valueB = 1;
byte valueC = (byte)(valueA + valueB);
Console.WriteLine("{0} + {1} = {2}", valueA.ToString(), 
                                     valueB.ToString(), 
                                     valueC.ToString());

当我尝试运行程序时,它显示

255 + 1 = 0

上面的代码发生了什么?为什么编译器不抛出OverflowException?我怎样才能捕捉到异常?我是一个VB爱好者,正在慢慢地迁移到C#:)很抱歉有这个问题。

C#代码默认为unchecked,因此溢出将自动换行,而不是引发异常。

您可以通过将代码封装在checked块中来获得异常,而代价是轻微的性能历史记录。

因为默认情况下,C#不检查算术运算溢出。尝试用checked包装它,这样它就会抛出异常。

试试这个:

byte valueA = 255;
byte valueB = 1;
byte valueC = (byte)(valueA + valueB);
Console.WriteLine("Without CHECKED: {0} + {1} = {2}", valueA.ToString(), 
                                                      valueB.ToString(), 
                                                      valueC.ToString());
try
{
    valueC = checked((byte)(valueA + valueB));
    Console.WriteLine("With CHECKED: {0} + {1} = {2}", valueA.ToString(), 
                                                       valueB.ToString(), 
                                                       valueC.ToString());
}
catch (Exception e)
{
    Console.WriteLine("With CHECKED: " + e.GetType());
}

已在MSDN上检查

最新更新