Изменения

Перейти к: навигация, поиск
Добавлен метод представления "дополнение до единицы". Убрана лишняя точка в конце конспекта.
Из-за необходимости усложнять арифметические операции код со сдвигом для представления целых чисел используется не часто, но зато применяется для хранения порядка [[Представление вещественных чисел|вещественного числа]].
== Дополнительный код (дополнение до единицы) ==[[Файл:Представление двоичных чисел в дополнительном кодеПредставление_чисел_дополнением_до_единицы.jpg|230px|thumb|right|Нумерация двоичных чисел в представлении дополнения c дополнением до двухединицы. В отличии от кода со сдвигом, нулю соответствует код соответствуют коды 00...000и 11...111]]Чаще всего для В качестве альтернативы представления отрицательных целых чисел используется может использоваться код с дополнением до единицы (англ. ''Ones' complement''). Алгоритм получения кода числа: *если число положительное, то в старший разряд (который является знаковым) записывается ноль, а далее записывается само число;*если число отрицательное, то код получается инвертированием представления модуля числа (получается '''дополнительный обратный код''' ) Пример: переведём число −13 в восьмибитный код (так оно будет храниться в типе данных unsigned char). Прямой код модуля −13 --- 00001101, инвертируем и получаем 11110010.Для получения из дополнительного кода самого числа достаточно инвертировать все разряды кода. Таким способом можно получить диапазон значений <tex> [-2^{n-1}+1; 2^{n-1} - 1] </tex>. Достоинства метода: *Простое получение кода отрицательных чисел Недостатки метода: *выполнение арифметических операций с отрицательными числами требует усложнения архитектуры центрального процессора *существуют два нуля ("+0" и "−0") == Дополнительный код (дополнение до двух, ) ==[[Файл:Представление двоичных чисел в дополнительном коде.jpg|230px|thumb|right|Нумерация двоичных чисел в представлении c дополнением до двух.]]Чаще всего для представления отрицательных чисел используется код с дополнением до двух (англ. ''two's complement'').
Алгоритм получения дополнительного кода числа:
*если число положительное, то в старший разряд (который является знаковым) записывается ноль, далее записывается само число;*если число отрицательное, то все биты модуля числа инвертируются, то есть все единицы меняются на нули, а нули — на единицы (получается '''обратный код'''), к инвертированному числу прибавляется единица, далее к результату дописывается знаковый разряд, равный единице.
В качестве примера переведём число −5 в дополнительный восьмибитный код (так оно будет храниться в типе данных unsigned char). Прямой код модуля −5 — 0000101, обратный — 1111010, прибавляем 1, получаем 1111011, приписываем 1 в качестве знакового разряда, в результате получаем 11111011.
Также дополнительный код отрицательного числа <tex> A </tex>, хранящегося в <tex> n </tex> битах, равен <tex> 2^n - |A|</tex>. По сути, дополнительный код представляет собой дополнение <tex> |A| </tex> до <tex> 0 </tex>: так как в <tex> n </tex>-разрядной арифметике <tex> 2^{n} = 0 </tex> (двоичная запись этого числа состоит из единицы и <tex> n </tex> нулей, а в <tex> n </tex>-разрядную ячейку помещаются только <tex> n </tex> младших разрядов, то есть <tex> n </tex> нулей), то верно равенство <tex> 2^n - |A| + |A| = 0 </tex>.
Недостатки:
*ряд положительных и отрицательных чисел несимметричен, но это не так важно: с помощью дополнительного кода выполнены гораздо более важные вещи, желаемые от способа представления целых чисел..
==Список литературы==
2
правки

Навигация