C#
Создаем новое C# консольное приложение... и напишем код
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Вариант 1
unchecked
{
// int.MaxValue is 2,147,483,647
// int.MinValue is -2,147,483,648
int value1 = int.MaxValue + 10;
// есть переход с int.MaxValue + 1 в int.MinValue
// соответственно int.MaxValue + 10 это int.MinValue + 9
// результат value1 = -2147483639
}
// Вариант 2
int value2 = unchecked(int.MaxValue + 10);
// результат value2 = -2147483639
}
}
}
C#
На заметку 1!
Выражение, содержащее только константные значения, вызывает ошибку компилятора
если результат выходит за допустимые пределы типа.
class Program
{
static void Main(string[] args)
{
int value1 = int.MaxValue + 10;
// Ошибка компиляции! error CS0220: The operation overflows at compile time in checked mode
}
}
C#
На заметку 2!
Если выражение содержит одно или несколько неконстантных значений, компилятор
не выполняет проверку переполнения.
class Program
{
static void Main(string[] args)
{
int ten = 10;
int value1 = int.MaxValue + ten;
// результат value1 = -2147483639
}
}
C#
На заметку 3!
unchecked можно использовать внутри checked и наоборот
checked
{
unchecked
{
...
}
...
}