Бинарное вычитание без знака, когда числа слишком велики, чтобы образовать дополнение до двух

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

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

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

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


person J.M.    schedule 13.04.2011    source источник


Ответы (1)


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

  0xFFFFFFFF -  0xFFFF0000
= 0xFFFFFFFF + -0xFFFF0000
= 0xFFFFFFFF +  0x00010000
= 0x0000FFFF
person rlibby    schedule 13.04.2011
comment
Как-то я испортил свое вычитание на бумаге, так как получил другие результаты. Но я тоже так думал. +1. - person Joey; 13.04.2011