вычитание знаковых чисел в дополнительном коде

вычитание знаковых чисел в дополнительном коде

Предположим, что мы используем 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-битное сложение и вычитание.

Связанный контент