Я читаю учебник "Организация и дизайн компьютеров" Хеннесси и Паттерсона (4-е издание). На стр. 225 они описывают, как переполнение обнаруживается в подписанной арифметике с двумя дополнениями. Я просто не могу понять, о чем они говорят.
"Как мы обнаруживаем [переполнение], когда это происходит? Ясно, что добавление или вычитание двух 32-битных чисел может привести к результату, которому требуется 33 бита чтобы быть полностью выраженным".
Конечно. И ему не понадобится 34 бита, потому что даже самое маленькое 34-битное число вдвое меньше самого маленького 33-битного числа, и мы добавляем 32-разрядные номера.
"Отсутствие 33-го бита означает, что при переполнении бит знака задается со значением результата вместо правильного знака результат."
Что это значит? Битовый знак установлен с "значением" результата... означает, что он установлен так, как будто результат был неподписанным? И если да, то как это происходит из-за отсутствия 33-го бита?
"Так как нам нужен только один дополнительный бит, только бит знака может быть неправильным."
И там, где они полностью потеряли меня.
Что я получаю от этого, так это то, что при добавлении подписанных номеров происходит переполнение, если и только если бит знака неправильный. Поэтому, если вы добавите два положительных результата и получите отрицательный результат, или добавьте два негатива и получите положительный результат. Но я не понимаю их объяснений.
Кроме того, это относится только к неподписанным номерам, не так ли? Если вы добавляете подписанные номера, то, безусловно, обнаружение переполнения намного проще. Если последний сумматор ALU устанавливает бит переноса, происходит переполнение.
note: Я действительно не знаю, какие метки подходят здесь, не стесняйтесь редактировать их.