Что случилось с этим? Я делаю простое умножение:Не должно ли это переполнение? Это не так!
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
И в конце умножения, г показывает значение:
-5670418394979206991
Это явно переполнена, но исключение не возникает. Я бы хотел, чтобы один был поднят, но ...
Обратите внимание, что это на Windows Phone 7, но я не думаю, что это имеет какое-либо отношение к проблеме. Или это?
Обратите внимание, что причина, по которой unchecked является значением по умолчанию, состоит в том, что (1) 99% от времени целочисленной арифметики нигде не находится вблизи границ, а (2) арифметика проверена медленнее. Это один из редких случаев, когда дизайн C# выбирает опасные по умолчанию по соображениям производительности. –
x86 jitter использует простой jno, предсказание ветвей всегда хорошее, не может стоить больше, чем за один цикл. –
Не то, чтобы это было обязательно связано с дизайном C#, но в этом конкретном случае мы говорим о ARM. Поведение джиттера x86 несколько академическое – Stewart