Российский государственный гуманитарный университет
Опубликован: 13.07.2022 | Доступ: свободный | Студентов: 259 / 9 | Длительность: 11:54:00
Специальности: Программист
Лекция 2:

Кодирование чисел и текста

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Операции сложения и вычитания целых чисел

Пусть x и y - два неотрицательных целых числа. В компьютерных вычислениях разность y - x заменяется суммой прямого кода числа y и дополнительного кода числа (- x). Пусть сначала y \ge x. Тогда

y + x_{add} = p^k + y - x.

Коэффициент при p^k выйдет за границы k разрядов, поэтому он отбрасывается (напомним, что числа рассматриваются как остатки от деления на p^k). Оставшийся код является прямым кодом разности y - x.

Пусть теперь x > y. Тогда y - x < 0. Имеем:

y - x = y + p^k - x - p^k = y + x_{add} - p^k = - (y + x_{add})_{add}

Таким образом,

 (y + x_{add})_{add} = - (y - x).

Следовательно, если при вычислениях разность получается отрицательной (код начинается с p - 1), то величина y - x находится как дополнительный код полученного результата, умноженный на (- 1).

Аналогично,

- y - x = - y + p^k - x + p^k - 2p^k = y_{add} + x_{add} - 2p^k = - p^k - (y_{add} + x_{add})_{add}.

Таким образом,

p^k + (y_{add} + x_{add})_{add} = - (- y - x).

Пример 6. Найдем результаты операций сложения и вычитания

  1. 5 - 3; 5 + 3;
  2. 3 - 5; - 3 - 5

в двоичных кодах при кодировании в 1 байте.

Имеем: 5 = 101_2 = 00000101_2; 5_{inv} = 11111010_2; 5_{add} = 11111011_2; 3 = 11_2 = 00000011_2; 3_{inv} = 11111100_2; 3_{add} = 11111101_2.

  1. Вычислим 5 - 3 и 5 + 3. Для этого найдем 5 + 3_{add} и 5 + 3. Имеем:


    Старший разряд полученных чисел равен 0, поэтому они представляют прямой код результатов, которые соответственно имеют вид:

    5 - 3 = 10_2 = 2; 5 + 3 = 1000_2 = 8.
  2. Найдем 3 - 5 и - 3 - 5. Для этого вычислим 3 + 5_{add} и 3_{add} + 5_{add}:


    Старший разряд обоих полученных чисел равен 1. Поэтому они представляют отрицательные числа, и в обоих случаях следует найти дополнительный код. Имеем:

    00000001 + 1 = 00000010;
    00000111 + 1 = 00001000.

    Дополнительный код представляет собой прямой код абсолютной величины результата. Следовательно, 3 - 5 = - 2 и - 3 - 5 = - 8.

Пример 7. Найдем разность 128 - 589, заменив операцию вычитания операцией сложения. Для десятичного кодирования в данном случае достаточно использовать 4 разряда (пример 4).

Прямой код числа 589 имеет вид: 0589. Поэтому дополнительный код числа (- 589) выглядит следующим образом: 9410 + 1 = 9411.

Найдем сумму прямого кода первого числа и дополнительного кода второго: 0128 + 9411 = 9539. Старший разряд полученного числа равен 9, поэтому оно представляет отрицательное число, и необходимо найти дополнительный код: 0460 + 1 = 0461. Таким образом, 128 - 589 = - 461.

Аналогичным образом вычислим сумму (- 128 - 589) с помощью сложения дополнительных кодов. Имеем: 9411 + 9872 =1 19283. Следовательно, - 128 - 589 = - 717.

При выполнении арифметических операций в k разрядах могут возникать ошибки.

Пример 8. Найдем сумму 58 + 96 при двоичном кодировании в 1 байте для типа данных целых чисел со знаком. Имеем: 58 = 00111010_2, 96 = 01100000_2. Далее, 00111010 + 01100000 = 10011010.

Старший разряд полученного числа равен 1. Поэтому для полученного числа будет найден дополнительный код: 01100101 + 1 = 01100110. Далее, 01100110_2 = 102, и результат будет иметь вид: 58 + 96 = - 102. Причина заключается в том, что слагаемые находятся внутри диапазона чисел типа данных (табл. 2.2), а сумма - вне, так что фактически находится число 58 + 96 - 256 = - 102. В данном случае для корректного выполнения арифметических операций следует перейти к типу данных, который содержит большее число разрядов.

Кодирование действительных чисел

Действительные числа в электронных вычислительных устройствах могут иметь представление в двух форматах - с фиксированной запятой (или точкой), где для хранения дробной части используется фиксированное число разрядов, и с плавающей запятой (точкой). Ниже рассматриваются методы кодирования действительных чисел в формате с плавающей запятой (точкой) в соответствии со стандартом IEEE 754 (ред. 2019), который был разработан Институтом инженеров по электротехнике и радиоэлектронике (Institute of Electrical and Electronic Engineers).

Представление числа в нормализованном виде

Пусть p - основание системы счисления, где p - целое, p > 1.

Экспоненциальной формой представления ненулевого числа x называется его представление в виде

(- 1)^s * m * p^q,

где s = 0 для положительных чисел, s = 1 для отрицательных чисел, m > 0 и q - целое число. Число m называется мантиссой числа x, а число q - порядком. Для числа 0 мантисса и порядок полагаются равными 0, так что 0 представляется в виде 0 = 0 * p^0.

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >