Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
01._Predstavlenie_celykh_chisel_v_kompjutere.doc
Скачиваний:
13
Добавлен:
01.03.2025
Размер:
97.28 Кб
Скачать

Алгоритм получения дополнительного кода отрицательного числа.

Для получения дополнительного k-разрядного кода отрицательного числа необходимо

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

  2. значение всех бит инвертировать:все нули заменить на единицы, а единицы на нули(таким образом, получается k-разрядный обратный код исходного числа);

  3. к полученному обратному коду прибавить единицу.

Пример: Получим 8-разрядный дополнительный код числа -52:

00110100 - число |-52|=52 в прямом коде

11001011 - число -52 в обратном коде

11001100 - число -52 в дополнительном коде

Можно заметить, что представление целого числа не очень удобно изображать в двоичной системе, поэтому часто используют шестнадцатеричное представление:

1100 1100

С С

Проверка

52 + (-52) = ?

00110100

+

11001100

------------

1 00000000

При сложении получили 9-ти разрядное число, но так как разрядная сетка (один) байт состоит только из 8-ми бит, то старший бит, просто, теряется, и в результате получается число 0. Проверим 52 + (-52) = 0.

Знак числа в дополнительном коде

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

Это понимание особенно важно при преобразовании числа со знаком, представленного, например, в одном байте (ShortInt) в двухбайтовый формат (Integer):

Исходное число ShortInt, равное минус 38 , представленное в одном байте:

1

1

0

1

1

0

1

0

Правильно преобразованное в двухбайтовый формат представление того же самого числа "минус 38" в двухбайтовом формате (Integer):

старший байт

младший байт

1

1

1

1

1

1

1

1

1

1

0

1

1

0

1

0

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