Предположим, что мы используем 3-битное число в дополнительном коде и собираемся выполнить операцию вычитания. Уменьшаемое равно +3, а вычитаемое равно -4. Мы должны получить дополнение до 2 вычитаемого и прибавить его к уменьшаемому. +3=011 -4=100--->его дополнение до 2 снова равно 100, теперь мы их складываем и получаем 111, что неверно. Потому что мы должны получить 3-(-4)=+7, но результат отрицательный! Как вы анализируете переполнение? Почему результат неверен?
решение1
Если вы используете самый левый бит для указания знака, то вы не можете использовать все 3-битное число. 100
равно либо (положительное, беззнаковое) 4, либо на самом деле (отрицательное) 0.
Чтобы ваше число было "-4", оно должно быть на самом деле 1100
, а не просто 100
. Затем вы работаете с имеющейся у вас информацией, зная, что у вас есть 3-битное число и что одно из этих чисел отрицательное.
Я имею в виду ценность, которую вы получаете.является7. 111
для 3-битных беззнаковых чисел равно ровно 7.
Вы просто не принимаете во внимание тот факт, что первая цифра не является вашей знаковой цифрой, если вы используете 3-битную функцию дополнения. Сначала вам нужно посмотреть на свое число и отбросить информацию, которая не имеет отношения к непосредственной операции, то есть знаковую цифру. Знак говорит вам, что вам нужно с ним делать, но он не является «реальной» частью значения этого числа.
Если вы используете 3-битное число со знаком, то по определению вы можете выполнять только 2-битное сложение и вычитание.