Почему подписанные отрицательные числа преобразуются в числа без знака?

В частности, у меня есть большое число без знака и большое отрицательное число со знаком.

Почему я не могу разделить большое число на отрицательное число C ++

Когда я пытаюсь разделить их, я получаю нулевой результат просто потому, что что-то где-то преобразует мое число со знаком в беззнаковое (это означает, что оно должно быть положительным). >>.

Редактировать.

Просто чтобы быть абсолютно понятным. Я знаю, что это решено до нуля, и я доволен этим. Я также доволен предыдущей причиной, по которой он сводится к нулю, поскольку число преобразуется из числа без знака в число без знака.

Однако это не объясняет, почему число конвертируется из числа без знака в число без знака. Кажется, нет логической причины для этого.

0

Решение

Операнды арифметических операторов должны иметь одинаковые типы. Это делает язык более легким для определения и реализации, отчасти потому, что обрабатывается меньше случаев, а отчасти потому, что аппаратное обеспечение обычно не поддерживает операции смешанного типа. Формально C ++ определяется в терминах виртуальной машины, но ожидаемые возможности этой машины зависят от возможностей реального оборудования. Операторы, диктуемые стандартом, но не поддерживаемые аппаратным обеспечением (например, ваше гипотетическое разделение со знаком и без знака), должны быть реализованы авторами компилятора в коде библиотеки, что может повлиять на производительность.

Либо подписанный операнд необходимо преобразовать в неподписанный, либо наоборот. Комитет по стандартам выбрал первое.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]