Разбираемся в работе checked и unchecked С#

d

checked

Оператор checked применяется для проверки на переполнение, которое возникает при выполнении арифметических действий с целочисленными значениями.
Если в блоке checked происходит переполнение, то вызывается исключение.

    using System;
     
    class One {
     byte a = 254;
     byte b;
     public One(byte arg) {
      b = arg;
     }
     public void Result() {
      checked {
       Console.WriteLine("{0} + {1} = {2}", a, b, ((byte)(a + b)));
      }
     }
    }
     
    class Program {
     public static int Main() {
      Console.Write("введите число : ");
      byte val = byte.Parse(Console.ReadLine());
      One O = new One(val);
      O.Result(); 
      Console.ReadKey();
      return 0;
     }
    }
введите число : 2

Необработанное исключение: System.OverflowException: Переполнение в результате выполнения арифметической операции.
в One.Result() в d:\project\newCSharpConsole\0001\Main.cs:строка 11
в Program.Main() в d:\project\newCSharpConsole\0001\Main.cs:строка 21
Для продолжения нажмите любую клавишу . . . 

Оператор unchecked применяется для проверки на переполнение, которое возникает при выполнении арифметических действий с целочисленными значениями.
Если в блоке unchecked происходит переполнение, то исключение не вызывается.
Если не указывать блок unchecked, то так же происходит переполнение. Тогда, какой смысл его указывать?

    using System;
     
    class One {
     byte a = 254;
     byte b;
     public One(byte arg) {
      b = arg;
     }
     public void Result1() {
      //если произойдет переполнение, то исключение вызвано не будет
      unchecked {
       Console.WriteLine("{0} + {1} = {2}", a, b, ((byte)(a + b)));
      }
     }
     
     public void Result2() {
      //то же самое без оператора unchecked
      Console.WriteLine("{0} + {1} = {2}", a, b, ((byte)(a + b)));
     }
    }
     
    class Program {
     public static int Main() {
      Console.Write("введите число : ");
      byte val = byte.Parse(Console.ReadLine());
      One O = new One(val);
      O.Result1(); 
      O.Result2();
      Console.ReadKey();
      return 0;
     }
    }
введите число : 2
254 + 2 = 0
254 + 2 = 0 
Обновлено: 26.12.2019 — 20:44

1 комментарий

Оставить комментарий
  1. Оператор unchecked применяется для проверки на переполнение, которое возникает при выполнении арифметических действий с целочисленными значениями.

    Нет там никаких проверок. Это обычное поведение любой программы, независимо от использованного языка

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.