Для простоты я буду использовать байты:
byte a=250;
byte b=8;
byte c=a+b;
, если a, b и c были бы 'int', вы ожидаете 258, но в случае 'байтов' ожидаемый результат будет2 (258 & 0xFF), но в приложении Windows вы получаете исключение, а в консоли - нет (не знаю, но это может зависеть от IDE, я использую SharpDevelop).
Иногда,однако такое поведение желательно (например, вас интересуют только младшие 8 битов результата).
Вы можете сделать следующее:
byte a=250;
byte b=8;
byte c=(byte)((int)a + (int)b);
Таким образом, и "a", и "b 'преобразуются в' int ', добавляются, затем преобразуются обратно в' byte '.
Чтобы быть в безопасности, вы также можете попробовать:
...
byte c=(byte)(((int)a + (int)b) & 0xFF);
Или, еслиВы действительно хотите такое поведение, гораздо более простой способ сделать это:
unchecked
{
byte a=250;
byte b=8;
byte c=a+b;
}
Или сначала объявить свои переменные, а затем выполнить математические операции в разделе «unchecked».
Альтернативно,если вы хотите принудительно проверить переполнение, вместо этого используйте «флажок».
Надеюсь, что все прояснится.
Nurchi
PS
Поверь мне, это исключение - твой друг:)