Алгоритм получения дополнительного k-разрядного кода отрицательного числа
Модуль числа представить прямым кодом в k двоичных разрядах.
Значения всех разрядов инвертировать (все нули заменить на единицы, а единицы — на нули), получив, таким образом, k-разрядный обратный код исходного числа.
К полученному обратному коду, трактуемому как k-разрядное неотрицательное двоичное число, прибавить единицу.
Обратный код является дополнением исходного числа до числа 2k- 1, состоящего из k двоичных единиц. Поэтому прибавление единицы к инвертированному коду позволяет получить его искомый дополнительный код.
Пример . Получим дополнительный код числа -52 для восьми- и шестнадцатиразрядной ячеек.
Для восьмиразрядной ячейки: 00110100 — прямой код числа |-52| = 52;
1100 1011 — обратный код числа -52;
1100 1100 — дополнительный код числа -52
Для шестнадцатиразрядной ячейки:
0000 0000 0011 0100 — прямой код числа -|52|;
1111 1111 1100 1011 — обратный код числа -52;
1111 1111 1100 1100 — дополнительный код числа-52.
Вопрос. Какое минимальное отрицательное число можно записать в k разрядах?
Ответ. Описанный выше алгоритм получения дополнительного кода для отрицательного числа знаковую единицу в левом разряде образует автоматически при |m|<=2k-1. Если же 2k-1<|m|<2k, то попытка реализации данного алгоритма приведет к тому, что в левом разряде будет находиться цифра 0, соответствующая компьютерному представлению положительных чисел, что неверно. Представим значение 2k-|m| в следующем виде: 2k-|m| = 2k-1 +(2k-1 - |m|). Здесь первое слагаемое 2k-1 соответствует единице в левом знаковом разряде. То есть при представлении отрицательного числа m дополнительным кодом в самом левом (знаковом) разряде записывается знак отрицательного числа (единица), а в остальных разрядах — число 2k-1 - |m|. Следовательно, минимальное отрицательное (максимальное по модулю) число т, которое можно представить в k разрядах, равно -2k-1 (это ограничение и было приведено в определении 2).
Дополнительный восьмиразрядный код для чисел -128, -127 и -0 приведены в таблице:
Число | -128 | -127 | -0 |
Прямой код модуля | 1000 0000 | 01111111 | 0000 0000 |
Обратный код | 0111 1111 | 1000 0000 | 11111111 |
Дополнительный код | 1000 0000 | 1000 0001 | 0000 0000 |
Отметим, что для числа -128 прямой код совпадает с дополнительным, а дополнительный код числа -0 совпадает с обычным нулем. При преобразовании обратного кода для числа -0 в его дополнительный код правила обычной двоичной арифметики нарушаются, а именно:
1111 11112+ 1 = 1 0000 00002 = 2k = 0.
Восстановить модуль исходного десятичного отрицательного числа по его дополнительному коду можно двумя способами.
Способ 1 (обратная цепочка преобразований): вычесть единицу из дополнительного кода, инвертировать полученный код и перевести полученное двоичное представление числа в десятичное.
Способ 2: по приведенному выше алгоритму построить дополнительный код для имеющегося дополнительного кода искомого числа и представить результат в десятичной системе счисления.
Пример. Получим десятичное значение числа по его дополнительному коду 100101112.
Способ 1:
из дополнительного кода вычтем 1: 10010111 - 1 = 10010110 (получили обратный код);
инвертируем полученный код: 01101001 (получили модуль отрицательного числа);
переведем полученное двоичное значение в десятичную систему счисления: 011010012 = 26 + 25 + 23 + 1 = 64 + 32 + 8 + 1 = 105.
Ответ: -105.
Способ 2:
инвертируем имеющийся дополнительный код: 01101000;
прибавим к результату 1: 01101000 + 1 = 01101001 (получили модуль отрицательного числа);
переведем полученное двоичное значение в десятичную систему счисления: 011010012 = 26 + 25 + 23 + 1 = 64 + 32 + 8 + 1 = 105.
Ответ-. -105.
Целые числа со знаком, представимые в k разрядах, принадлежат диапазону [-2k-1, 2k-1 -1], который не является симметричным относительно 0. Это следует учитывать при программировании. Если, например, изменить знак у наибольшего по модулю отрицательного числа, то полученный результат окажется уже не представимым в том же числе разрядов.
Ниже приведены значения границ диапазонов для знаковых представлений в ячейках с различной разрядностью:
Разрядность | Минимальное число | Максимальное число |
8 | -128 | 127 |
16 | -32768 | 32767 |
32 | -2147483648 | 2147483647 |
64 | -9223372036854775808 | 9223372036854775807 |
- Представление информации в компьютере. Представление информации в компьютере.
- 1. Представление целых чисел.
- 1.1. Представление целых положительных чисел.
- Вопрос 1. Можно ли в 8-ми разрядной ячейки представить со знаком число 200?
- 1.2. Представление целых отрицательных чисел.
- Алгоритм получения дополнительного k-разрядного кода отрицательного числа
- Особенности реализации арифметических операций в конечном числе разрядов.
- 2. Представление вещественных чисел.
- Представление вещественных чисел в формате с плавающей точкой
- Выполнение арифметических операций над вещественными числами.
- Особенности реализации вещественной компьютерной арифметики.
- 3. Представление текстовой информации.
- 4. Представление графической информации.
- Общие подходы к представлению в компьютере информации естественного происхождения.
- Векторное и растровое представление графической информации.
- Квантование цвета.
- Цветовая модель rgb.
- Цветовая модель cmyk.
- Цветовая модель hsb.
- 5. Представление звуковой информации.
- Понятие звукозаписи.
- Импульсно – кодовая модуляция.
- Формат midi.
- Принципы компьютерного воспроизведения звука.
- 6. Методы сжатия цифровой информации.
- 6.1. Алгоритмы обратимых методов.
- Метод упаковки
- Алгоритм Хаффмана
- Алгоритм построения дерева Хаффмана
- Алгоритм rle
- Алгоритмы Лемпеля-Зива.
- 6.2. Методы сжатия с регулируемой потерей информации.
- Алгоритм jpeg
- Алгоритм мрз
- Алгоритмы mpeg
- Выводы.