Csharp/C Sharp/Data Types/checked unchecked
Содержание
Checked and Unchecked
<source lang="csharp">
using System; using System.Collections.Generic; using System.Text; class Program {
static void Main(string[] args) { Console.WriteLine("Max value of byte is {0}.", byte.MaxValue); Console.WriteLine("Min value of byte is {0}.", byte.MinValue); byte b1 = 100; byte b2 = 250; try { checked { byte sum = (byte)(b1 + b2); byte b4, b5 = 100, b6 = 200; b4 = (byte)(b5 + b6); Console.WriteLine("sum = {0}", sum); } } catch (OverflowException e) { Console.WriteLine(e.Message); } unchecked { byte sum = (byte)(b1 + b2); Console.WriteLine("sum = {0}", sum); } }
}
</source>
Checking for overflows.
<source lang="csharp">
using System; public class MainClass {
public int CheckedAddition(short s1, short s2) { int z = 0; try { z = checked((short)(s1 + s2)); } catch (OverflowException) { Console.WriteLine("Overflow Exception, Returning 0"); } return z; } public int UncheckedAddition(short s1, short s2) { int z = ((short)(s1 + s2)); return z; } public static void Main() { MainClass app = new MainClass(); short s1 = 32767; short s2 = 32767; Console.WriteLine("Checked Addition is: {0}",app.CheckedAddition(s1, s2)); Console.WriteLine("Unchecked Addition is: {0}",app.UncheckedAddition(s1, s2)); }
}
</source>
Demonstates using checked keyword to detect an overflow
<source lang="csharp"> // Compile this program with the following command line: // C:>csc /checked OvrFlow2.cs
using System; public class OvrFlow2 { static public void Main () { int large = 2147483647; int larger = large; unchecked { ++larger; larger *= 2; } Console.WriteLine ("large = " + large); Console.WriteLine ("larger = " + larger); } } </source>
Demonstates using checked keyword to detect an overflow 2
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
// // OvrFlow1.cs -- Demonstates using checked keyword to detect an overflow. // // Compile this program with the following command line: // C:>csc OvrFlow1.cs // namespace nsOverflow {
using System; public class OvrFlow1 { static public void Main () { int large = 2147483647; int larger = large; try { larger = checked (++larger); } catch (OverflowException e) { Console.WriteLine ("The operation caused an overflow"); Console.WriteLine (e.Message); } Console.WriteLine ("large = " + large); Console.WriteLine ("larger = " + larger); } }
}
</source>
Operators and Expressions:Checked and Unchecked Expressions
<source lang="csharp"> using System; public class CheckedandUncheckedExpressions {
public static void Main() { unchecked { byte a = 55; byte b = 210; byte c = (byte) (a + b); } }
}
</source>
OverflowCheck
<source lang="csharp"> using System; using System.Collections.Generic; using System.Text; class Program {
static void Main(string[] args) { byte destinationVar; short sourceVar = 281; destinationVar = checked((byte)sourceVar); Console.WriteLine("sourceVar val: {0}", sourceVar); Console.WriteLine("destinationVar val: {0}", destinationVar); }
}
</source>
unchecked int overflow
<source lang="csharp"> using System;
class IntegerOverFlowConst {
static void Main() { const ushort MAXUSHORT = 65535; const ushort ONE = 1; unchecked { ushort total = (short)MAXUSHORT + ONE; } }
}
</source>