Беззнаковое двоичное вычитание, когда числа слишком велики, чтобы образовать дополнение к двум - PullRequest
1 голос
/ 13 апреля 2011

Я в компьютерной архитектуре и мой проф. не смог дать удовлетворительный ответ.

Предполагая, что у нас 32-битный процессор, если у нас есть два целых числа без знака x и y , оба из которых больше 2 31 что они слишком велики для правильного преобразования в форму дополнения до двух) как мы выполняем вычитание?

Если вычитаемое значение было константой, я вижу, как компилятор мог бы компенсировать это в статическом анализе. Но как нам справиться с этой возможностью во время выполнения, особенно в статически скомпилированном языке, таком как C? Это просто вызывает ошибку переполнения или некоторые архитектуры subu поддерживают специальные операции?

Все, что я нахожу для MIPS, говорит о том, что оно просто выполняет вычитание из двух дополнений, но в этом случае это не должно работать, не так ли?

1 Ответ

1 голос
/ 13 апреля 2011

Ситуация, которую вы представляете, не является проблемой.Конкретный пример:

  0xFFFFFFFF -  0xFFFF0000
= 0xFFFFFFFF + -0xFFFF0000
= 0xFFFFFFFF +  0x00010000
= 0x0000FFFF
...