Представление в двоичном дополнительном коде

Наиболее распространенной системой представления целых чисел в современных компьютерах является представление в двоичном дополнительном коде (two's complement notation). Эта система использует фиксированное число битов для представления числового значения. В современном оборудовании принято использовать представление, при котором каждому значению отводится 32 бита. Такой подход позволяет хранить большой диапазон чисел, однако его очень трудно изобразить наглядно. Поэтому мы сосредоточим наше внимание на коротких системах представления.

Два представления в двоичном дополнительном коде изображены на рис. 1.20. В основе одного лежит набор из трех битов, в основе другого — набор из четырех битов. Такая таблица кодов строится, начиная с цепочки, состоящей из одних нулей, затем отсчитываются значения до цепочки, состоящей из нуля, за которым следуют единицы. Эти наборы битов являются представлениями значений 0, 1, 2, 3 и т. д. Последовательности, которые являются кодами отрицательных чисел, начинаются с цепочки битов, состоящей из одних единиц. Затем отсчитываются в обратном порядке до цепочки, содержащей единицу, за которой следуют нули. Эти наборы битов представляют числа -1, -2, -3 и т. д. Если вам трудно считать в обратном порядке в двоичной системе счисления, просто начните считать с конца таблицы, с цепочки, состоящей из единицы и нулей, и считайте до цепочки, состоящей из единиц.

Обратите внимание на то, что в представлении в двоичном дополнительном коде крайний слева разряд обозначает знак числа. Поэтому его часто называют знаковым разрядом (sign bit). Знаковый разряд отрицательных чисел равен 1, а положительных чисел — 0.

Существует удобное соотношение между записью положительного и отрицательного чисел, одинаковых по модулю. Они совпадают, если их читать справа налево, до первой единицы включительно, а с этого места они являются дополнениями друг друга (дополнением набора битов (complement) является набор битов, который получается путем замены всех нулей на единицы и наоборот1; например, 0110 и 1001 — дополнения друг друга). Например, в 4-битовом представлении (см. рис. 1.20) записи чисел 2 и -2 заканчиваются на 10, но запись числа 2 начинается с 00, а числа -2 — с 11. Это наблюдение помогает найти алгоритм для получения записи отрицательного числа из записи положительного и наоборот, когда эти числа равны по модулю. Мы просто переписываем исходную последовательность до тех пор, пока не будет переписана единица, затем мы переписываем оставшиеся разряды, заменяя их дополнениями (рис. 1.21). Обратите внимание, что самое маленькое отрицательное число в представлении в дополнительном коде не имеет положительного эквивалента.

Понимание основных свойств представления в двоичном дополнительном коде ведет к алгоритму его декодирования. Если знаковый бит записи равен 0, то нужно просто читать значение, как если бы эта последовательность была двоичной записью числа. Например, 0110 является представлением числа 6, потому что 110 является двоичной записью шести. Если знаковый разряд равен 1, значит, перед нами отрицательное число и нам остается только найти его модуль. Переписываем исходную последовательность справа налево, пока не будет переписана 1, затем переписываем оставшиеся биты, дополняя их. И, наконец, расшифровываем полученную последовательность, как если бы она была двоичной записью числа.

Например, для того чтобы перевести последовательность 1010 в десятичную систему счисления, мы сначала определяем, что перед нами отрицательное число, так как знаковый разряд равен 1. Следовательно, переписываем запись как 0110. Определяем, что она является представлением числа 6, и делаем вывод о том, что исходный набор битов является представлением числа -6.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: