В частности, у меня есть большое число без знака и большое отрицательное число со знаком.
Почему я не могу разделить большое число на отрицательное число C ++
Когда я пытаюсь разделить их, я получаю нулевой результат просто потому, что что-то где-то преобразует мое число со знаком в беззнаковое (это означает, что оно должно быть положительным). >>.
Редактировать.
Просто чтобы быть абсолютно понятным. Я знаю, что это решено до нуля, и я доволен этим. Я также доволен предыдущей причиной, по которой он сводится к нулю, поскольку число преобразуется из числа без знака в число без знака.
Однако это не объясняет, почему число конвертируется из числа без знака в число без знака. Кажется, нет логической причины для этого.
Операнды арифметических операторов должны иметь одинаковые типы. Это делает язык более легким для определения и реализации, отчасти потому, что обрабатывается меньше случаев, а отчасти потому, что аппаратное обеспечение обычно не поддерживает операции смешанного типа. Формально C ++ определяется в терминах виртуальной машины, но ожидаемые возможности этой машины зависят от возможностей реального оборудования. Операторы, диктуемые стандартом, но не поддерживаемые аппаратным обеспечением (например, ваше гипотетическое разделение со знаком и без знака), должны быть реализованы авторами компилятора в коде библиотеки, что может повлиять на производительность.
Либо подписанный операнд необходимо преобразовать в неподписанный, либо наоборот. Комитет по стандартам выбрал первое.
Других решений пока нет …