Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тех прог.doc
Скачиваний:
40
Добавлен:
14.11.2019
Размер:
3.59 Mб
Скачать

13.3.Двоичный дополнительный код

Рассмотрим теперь знаковый тип char. Здесь часть битовых комбинаций рассматриваются как положительные числа, а часть как отрицательные. В качестве нуля и положительных чисел принимаются битовые комбинации:

00000000, 00000001,…, 01111111.

Эти комбинации рассматриваются как числа в двоичной системе счисления со значениями:

0, 1, 2, …, 127.

Для отрицательных чисел остаются комбинации:

10000000. 10000001, 10000010, …, 11111111,

у которых старший разряд равен 1. Данным комбинациям можно поставить в соответствие отрицательные числа различными способами. Наиболее удобным оказался дополнительный код, показанный в табл.49.

Таблица 49. Двоичный дополнительный код

Битовая

комбинация

Числовое

значение

Битовая

комбинация

Числовое

значение

1000 0000

–128

0111 1111

127

1000 0001

–127

0111 1110

126

1000 0010

–126

0000 0111

7

1111 1001

-7

0000 0110

6

1111 1010

–6

0000 0101

5

1111 1011

–5

0000 0100

4

1111 1100

–4

0000 0011

3

1111 1101

–3

0000 0010

2

1111 1110

–2

0000 0001

1

1111 1111

–1

0000 0000

0

Сравнивая комбинации для положительных и отрицательных чисел, замечаем, что старшие разряды одинаковых по модулю чисел являются обратными или дополнительными по отношению друг к другу, то есть 0 заменяется 1 и наоборот, младшие же разряды одинаковы. Отсюда вытекает следующее правило:

для получения представления абсолютного значения какого-либо отрицательного числа нужно выписать разряды справа, включая первую 1, а все разряды после первой 1 заменить на обратные; для получения представления какого-либо отрицательного числа нужно выписывать разряды для его модуля вплоть до первой 1, а остальные разряды заменить на обратные.

Можно сформулировать и другое правило:

для нахождения модуля отрицательного числа, представленного в двоичном дополнительном коде, нужно заменить все его разряды на обратные и добавить 1.

Найдем, для примера, сумму 1 + (–1):

+

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

Девятый разряд выходит за границы разрядной сетки и отбрасывается, поэтому получается правильный результат 0.

Формально результат сложения

1 + (–1)

равен

1000000002 = 28.

Такой же результат получается при сложении любых двух одинаковых по модулю чисел противоположного знака, то есть битовые комбинации противоположных по знаку чисел дополняют друг друга до 28. Отсюда произошло название данного способа представления чисел.

Преимущество двоичного дополнительного кода состоит в том, что процессору достаточно уметь выполнять только две операции: сложения и получения обратного по знаку числа, вычитание сводится к этим операциям, так как разность любых чисел a – b можно представить в виде суммы a + (-b).

Ограниченность разрядной сетки приводит в предельных случаях к парадоксальным результатам. Вычислим, например, 127 + 1:

+

0

1

1

1

1

1

1

1

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

0

Получили:

127 + 1 = –128.

Другие знаковые типы используют также двоичный дополнительный код, только имеют большее число разрядов.