Дополнительный код:
занимаемые единицы |
1 |
1 |
1 |
1 |
1 |
1 |
10 |
|
||||
- |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||
|
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
||||
|
|
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
|||
Для обратного кода также существует константа перевода , в данном случае она равна 11111111. Проверьте правильность преобразования в обратный код числа 34. Очевидно, что для 2-х байтного числа константой перевода в дополнительный код будет число 100000000000000002 или 1000016. Часто при решении задач удобнее работать с шестнадцатеричным представлением чисел, а ответ уже переписывать в двоичной системе.
Действия с машинными кодами чисел.
Напомним, что машинные коды чисел призваны заменить отсутствующую в компьютере операцию вычитания (и деления тоже) на операцию сложения. Разберем примеры сложения машинных кодов различных чисел.
Действия над числами, представленных в естественной форме
(для компьютера - это целые числа)
При сложении кодов целых чисел нужно учитывать следующие положения.
Числа хранятся в дополнительном коде.
В сумматоре числа складываются вместе со знаками, при этом образуется знак результата.
При сложении чисел с разными знаками единица переноса из знакового (старшего) разряда стирается.
Пример. Дано А=254, В=175. Найти сумму чисел при разных знаках слагаемых в 16-разрядном формате.
А = 25410 = FE16 = 111111102
В = 17510 = AF16 = 101011112
Машинные коды этих чисел с разными знаками представим в таблицах.
|
254 |
-254 |
ПК |
0 000000011111110 |
1 000000011111110 |
ОК |
1 111111100000001 |
|
ДК |
1 111111100000010 |
|
175 |
-175 |
ПК |
0 000000010101111 |
1 000000010101111 |
ОК |
1 111111101010000 |
|
ДК |
1 111111101010001 |
Выполним действия (во всех случаях выполняется сложение в дополнительном коде!).
С1 = А + В
А |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
В |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
С1 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
Проверка: С1 = 1101011012 = 28+27+25+23+22+20 = 256+128+32+8+4+1 = 42910
С2 = А - В = А + (-В)
А |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
-В |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
С2 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
Перенос из знакового разряда исключаем.
Проверка: С2 = 10011112 = 26+23+22+21+20 = 64+8+4+2+1 = 7910
С3 = В - А = В + (-А)
В |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
-А |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
С3 |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
Число С3 отрицательное в дополнительном коде.
Проверка: получим прямой код числа С3.
ДК |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
ОК |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
ПК |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
С3 = -10011112 = -(26+23+22+21+20 )= -(64+8+4+2+1) = -7910
С4 = -А - В = (-А) + (-В)
-А |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-В |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
С4 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
Перенос из знакового разряда исключаем.
Число С4 отрицательное в дополнительном коде.
Проверка: получим прямой код числа С4.
ДК |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
ОК |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
ПК |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
С4 = -1101011012 =-( 28+27+25+23+22+20 )=-( 256+128+32+8+4+1) =- 42910
