2012-07-22 16 views
12

Guten Tag SO! Ich habe versucht, zwei Byte-Variablen hinzuzufügen und merkwürdiges Ergebnis bemerkt.Byte + Byte = unbekanntes Ergebnis

byte valueA = 255; 
byte valueB = 1; 
byte valueC = (byte)(valueA + valueB); 

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

als ich versuchte, das Programm auszuführen, Es zeigt

255 + 1 = 0 

Was ist mit den obigen Code ist passiert? Warum wirft der Compiler keine OverflowException? Wie kann ich möglicherweise die Ausnahme abfangen? Ich bin ein VB-Typ und langsam auf C# migriert :) Sorry für die Frage.

+1

Nun, Ihr Code nicht überläuft. Während der Besetzung werden zwar Bits verworfen, aber Sie haben dies ausdrücklich gefordert. –

Antwort

17

Der C# -Code ist standardmäßig unchecked, so dass Überläufe stillschweigend umgangen werden, anstatt eine Ausnahme auszulösen.

Sie können eine Ausnahme erhalten, indem Sie Ihren Code in einem checked Block um den Preis eines geringen Leistungshist wickeln.

9

weil C# nicht standardmäßig auf Überläufe arithmetischer Operationen überprüft. Versuchen Sie, es mit checked zu verpacken, so dass es eine Ausnahme auslöst.

versuchen Sie dies:

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()); 
} 

checked @ MSDN

+0

danke für die Probe –

Verwandte Themen