Прямой, обратный и дополнительный код

Прямой, обратный и дополнительный код Photo
Author: Tatyana Milkina

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

Числа в памяти компьютера хранятся в двоичном виде. Допустим у нас есть тип byte. В одном байте у нас восемь бит. Двоичное представление значения типа byte в памяти будет таким:

Представление типа byte в памяти фото

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

В следующей таблице представлены числа в десятичной системе и их аналогичный формат в двоичной системе:

Прямой код

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

При этом в вычислительной технике прямой код используется почти исключительно для представления положительных чисел.

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

Двоичное представление чисел

Для перевода отрицательного числа в дополнительный код используется следующий алгоритм:

  1. Все разряды числа (кроме первого разряда) инвертируются, т.е. заменяются противоположными (0 на 1, а 1 на 0):

    Обратный код числа

  2. Далее следует прибавить единицу к получившемуся инверсией числу:
    Дополнительный код числа

В следующей таблице представлен прямой, обратный и дополнительный код для отрицательных чисел. В обратном коде существует небольшая проблема, связанная с тем, что у нас получается два ноля. У нас есть как бы 0 и  -0, и они имеют разные значения. Но в дополнительном коде нолик имеет такое же значение, как и прямой код:

Прямой, обратный и дополнительный код

Презентацию с видео можно скачать на Patreon.

Курс 'Java для начинающих' на Udemy Курс 'Java для начинающих' на Udemy
Read also:
Comments