Files
hello-algo/ru/docs/chapter_data_structure/number_encoding.md
2026-01-20 15:08:42 +08:00

6.8 KiB
Raw Blame History

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

!!! tip

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

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

В таблице из предыдущего раздела можно заметить, что во всех целочисленных типах отрицательных чисел на одно больше, чем положительных. Например, диапазон значений byte составляет [-128, 127]. Этот факт кажется не совсем интуитивным, и его внутренняя причина связана с концепциями прямого, обратного и дополнительного кодов.

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

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

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

Взаимное преобразование прямого, обратного и дополнительного кодов

Кодирование чисел с плавающей запятой