mirror of
https://github.com/krahets/hello-algo.git
synced 2026-02-09 13:45:35 +08:00
6.8 KiB
6.8 KiB
Кодирование чисел *
!!! tip
В этой книге разделы, отмеченные символом *, являются необязательными для чтения. Если у вас ограничено время или возникают трудности с пониманием, вы можете пропустить их и вернуться к ним после изучения обязательных разделов.
Прямой, обратный и дополнительный коды
В таблице из предыдущего раздела можно заметить, что во всех целочисленных типах отрицательных чисел на одно больше, чем положительных. Например, диапазон значений byte составляет [-128, 127]. Этот факт кажется не совсем интуитивным, и его внутренняя причина связана с концепциями прямого, обратного и дополнительного кодов.
Прежде всего необходимо отметить, что числа хранятся в компьютере в виде дополнительного кода. Прежде чем проанализировать причины этого, сначала дадим определения всем трем кодам.
- Прямой код: старший бит двоичного представления числа рассматривается как знак, где
0обозначает положительное число,1-- отрицательное, остальные биты представляют значение числа. - Обратный код: обратный код положительного числа совпадает с его прямым кодом, обратный код отрицательного числа получается инверсией всех битов прямого кода, кроме знакового.
- Дополнительный код: дополнительный код положительного числа совпадает с его прямым кодом, дополнительный код отрицательного числа получается добавлением
1к его обратному коду.
На рис. 3.4 изображены методы преобразования прямого, обратного и дополнительного кодов между собой.
