следующие прекрасно работает без ошибок и diff
является 1:Почему не возникает исключение переполнения?
int max = int.MaxValue;
int min = int.MinValue;
//Console.WriteLine("Min is {0} and max is {1}", min, max);
int diff = min - max;
Console.WriteLine(diff);
Не было тогда все программы быть подозреваемым? не + б не больше сумма и б, где и б имеют тип int
. Иногда бывает, но иногда это сумма * a, b и 2 * int.MinValue.
* Сумма, как и в обычном английском смысле того, игнорируя любое знание компьютера или размеру слова
В PowerShell, он выглядит лучше, но он по-прежнему не является аппаратным исключением из операции добавления. Оказывается, использовать long
перед заливкой назад к int
:
[int]$x = [int]::minvalue - [int]::maxvalue
Cannot convert value "-4294967295" to type "System.Int32". Error: "Value was either too large or too small for an Int32."
Архитектура iAPX не предлагает встроенную проверку переполнения для операции «Добавить»? –
@OldGeezer: Я бы не хотел точно сказать, как это реализовано ниже - но неконтролируемая арифметика * очень немного быстрее в моем опыте. –