Компилятор C # говорит, что я не могу добавить ulong и long.
Правильно.
x может быть больше, чем long.MaxValue, хотя min можетбыть отрицательным
Правильно.
Так что я не могу привести одно к другому.
Неверно.Брось их.Посмотрите, что происходит!Вы можете быть приятно удивлены.
Длинная / длинная арифметика не отличается;битовые шаблоны абсолютно одинаковы и компилируются в один и тот же код.Это просто интерпретация битов, которые отличаются.
Одно слово предупреждения: можно перевести C # в режим, в котором происходит сбой при переполнении, включающем целочисленную арифметику, и выявно не хочу, чтобы здесь произошел сбой.Вы можете убедиться, что этого не произойдет, даже если кто-то включит «отмечен по умолчанию», используя функцию unchecked
в форме выражения или оператора.