Я занимаюсь компьютерной архитектурой, и моя проф. не смог дать удовлетворительного ответа.
Предполагая, что у нас есть 32-разрядный процессор, если у нас есть два целых числа без знака x и y, оба из которых больше 231 (так что они слишком велики для правильного преобразования в форму дополнения до двух) как мы выполняем вычитание?
Если бы вычитаемое было константой, я вижу, как компилятор мог бы компенсировать это в статическом анализе. Но как нам справиться с этой возможностью во время выполнения, особенно в статически компилируемом языке, таком как C? Это просто вызывает ошибку переполнения или некоторые архитектуры subu
поддерживают специальные операции?
Все, что я нашел для MIPS, говорит, что он просто выполняет вычитание дополнения до двух, но в этом случае это не должно работать, не так ли?
1 ответ
Ситуация, которую вы представляете, не является проблемой. Конкретный пример:
0xFFFFFFFF - 0xFFFF0000
= 0xFFFFFFFF + -0xFFFF0000
= 0xFFFFFFFF + 0x00010000
= 0x0000FFFF
Похожие вопросы
Новые вопросы
binary
Двоичная система счисления base-2 представляет числа с использованием двух символов: 0 и 1. Для скомпилированных компьютерных программ вместо этого используйте тег «исполняемый».