37
правок
Изменения
м
перевод констант в tex
== Прямой код ==
[[Файл:Представление двоичных чисел в прямом коде.jpg|230px|thumb|right|Нумерация двоичных чисел в прямом представлении]]
При записи числа в '''прямом коде''' (''sign-and-magnitude method'') старший разряд (''most significant bit'') является знаковым разрядом (''sign bit''). Если его значение равно нулю, то число положительное, если единице — отрицательное. В остальных разрядах (которые называются цифровыми) записывается двоичное представление модуля числа. Например, число −5 <tex> -5 </tex> в восьмибитном типе данных, использующем прямой код, будет выглядеть так: <tex> 10000101</tex>.
Таким способом в <tex> n </tex>-битовом типе данных можно представить диапазон чисел <tex> [-2^{n-1} + 1; 2^{n-1} - 1] </tex>.
*выполнение арифметических операций с отрицательными числами требует усложнения архитектуры центрального процессора (например, для вычитания невозможно использовать сумматор, необходима отдельная схема для этого);
*существуют два нуля ("<tex> +0" </tex> и "−0")<tex> -0 </tex>, из-за чего усложняется арифметическое сравнение.
Из-за этого прямой код используется очень редко.
== Код со сдвигом ==
[[Файл:Представление двоичных чисел в коде со сдвигом.jpg|230px|thumb|right|Код со сдвигом. Как видно, двоичное представление зациклено по модулю <tex dpi="100">1000..000_{(2)}</tex> (<tex>n</tex> нулей)]]
При использовании '''кода со сдвигом''' (''excess-''<tex> K </tex>, где <tex> K = 2^{n-1} </tex>; также говорят ''biased representation'') целочисленный отрезок от нуля до <tex> 2^n </tex> (<tex> n </tex> — количество бит) сдвигается влево на <tex> 2^{n-1} </tex>, а затем получившиеся на этом отрезке числа последовательно кодируются в порядке возрастания кодами от <tex> 000...\dots 0 </tex> до <tex> 111...\dots 1</tex>. Например, число −5 <tex> -5 </tex> в восьмибитном типе данных, использующем код со сдвигом, превратится в −5 <tex> -5 + 128 = 123</tex>, то есть будет выглядеть так: <tex> 01111011</tex>.
По сути, при таком кодировании:
== Дополнительный код (дополнение до единицы) ==
[[Файл:Представление_чисел_дополнением_до_единицы.jpg|230px|thumb|right|Нумерация двоичных чисел в представлении c дополнением до единицы. В отличии от кода со сдвигом, нулю соответствуют коды <tex> 00...000 </tex> и <tex> 11...111</tex>]]
В качестве альтернативы представления целых чисел может использоваться код с дополнением до единицы (англ. ''Ones' complement'').
*если число отрицательное, то код получается инвертированием представления модуля числа (получается '''обратный код''')
Пример: переведём число −13 <tex> -13 </tex> в восьмибитный код (так оно будет храниться в типе данных unsigned char). Прямой код модуля −13 <tex> -13 --- 00001101</tex>, инвертируем и получаем 11110010.
Для получения из дополнительного кода самого числа достаточно инвертировать все разряды кода.