Невозможно провести различие между положительным числом и отрицательным числом с одинаковым представлением.Я создал несколько программ, в которых использовал эту двусмысленность, чтобы выполнить работу.Как вы говорите, обычная процедура состоит в том, чтобы сказать, что двоичное число, старший бит которого (MSB) равен 1
, чтобы быть отрицательным, а старший бит 0
должен быть положительным.Для четырех битов, которые дают диапазон от -8 до + 7.
Кроме того, один из способов, с помощью которого ЦП может обнаружить переполнение, состоит в сравнении переносного бита , который поступает в MSB, и одногоэто выходит из MSB.Если эти биты одинаковы - оба равны нулю или оба равны одному, то переполнения не было.Если эти биты разные - один равен нулю, а другой - один, то при добавлении произошло переполнение.
В вашем примере 7 плюс 7 или 0111 + 0111
обратите внимание, что при добавленииОт 111
до 111
(значения исключая MSB) вы получаете 1110
, поэтому в результате получается 110
с битом переноса 1
в MSB.Затем, когда вы добавляете MSB и перенос, вы видите 0+0+1
, который равен 1
и не имеет переноса MSB.Таким образом, перенос - 1
, перенос - 0
, поэтому произошел переполнение.
Многие процессоры обнаруживают такие ситуации.После добавления один бит состояния будет битом переноса в MSB, а другой будет битом переноса из MSB.Флаг условия переполнения повышается, если эти биты различаются.