(2-1), второй позиции — 1/4 (2-2), следующей — 1/8 (2-3) и т. д.
Как видно из сказанного, эта закономерность представляет собой продолжение правила, сформулированного выше: при движении по записи числа влево вес разряда увеличивается в два раза.
Для того чтобы получить десятичное представление дробного числа из его двоичной записи, нужно выполнить те же действия, что и в случае с целым числом: надо умножать значение каждой цифры на вес соответствующего разряда.
Как перевести двоичное число 111.011 в десятичную дробь 73/8, показано на рис. 1.8.
Двоичная запись
1 | 1 | 1. | 0 | 1 | 1 | ||
1 | х Одна восьмая = 1/8 | ||||||
0 | х Одна четвертая = 1/4 | ||||||
1 | х Одна вторая = 0 | ||||||
1 | х Один = 1 | ||||||
0 | х Два = 2 | ||||||
1 | х Четыре = 4 |
Значение Вес Сумма 73/8
бита разряда
Рис. 1.8. Перевод чисел из двоичной системы в десятичную
При сложении двух чисел поступают также как и при сложении целых чисел.
Чтобы получить сумму двух дробных чисел, записываем числа одно под другим так, чтобы точки находились в одном столбце, и выполняем те же действия, как с целыми числами. Например, числа 10.011 и 100.11 в сумме дают 111.001:
+01.101
11.010
100.111
Наиболее распространенной системой представления целых чисел в современных компьютерах является представление в двоичном дополнительном коде (two's complement notation). В этой системе используется фиксированное число битов для представления числового значения.
В современном оборудовании используется кодировка, в которой каждому значению отводится 32 бита. Такой подход позволяет хранить большой диапазон чисел. Для наглядности рассмотрим этот подход на коротких системах представления.
На рисунке 1.9 изображены два представления в двоичном дополнительном коде: набор из трех битов и набор из четырех битов.
Такая таблица кодов строится, начиная с цепочки, состоящей из одних нулей, затем отсчитываются значения до цепочки, состоящей из нуля, за которым следуют единицы. Эти наборы битов являются представлениями значений 0, 1, 2, 3 и т. д. Последовательности, которые являются кодами отрицательных чисел, начинаются с цепочки битов, состоящей из одних единиц. Затем отсчитываются в обратном порядке до цепочки, содержащей единицу, за которой следуют нули. Эти наборы битов представляют числа -1, -2, -3 и т. д. Если трудно считать в обратном порядке в двоичной системе счисления, можно начать считать с конца таблицы, с цепочки, состоящей из единицы и нулей, и считать до цепочки, состоящей из единиц.
Надо обратить внимание на то, что в представлении в двоичном дополнительном коде крайний слева разряд обозначает знак числа. Поэтому его называют знаковым разрядом (sign bit). Знаковый разряд отрицательных чисел равен 1, а положительных чисел — 0.
Есть удобное соотношение между записью положительного и отрицательного чисел, одинаковых по модулю. Они совпадают, если их читать справа налево, до первой единицы включительно, а с этого места они являются дополнениями друг друга. Дополнением набора битов является набор битов, который получается путем замены всех нулей на единицы и наоборот, т.е. дополнении до N-1, где N — минимальное число, вызывающее перенос в следующий разряд при данном количестве разрядов (для 4-битового кода это 16). Это дополнение называют также инверсией. Например, 0010 и 1110 — дополнения друг друга.
Наборы из трех бит Наборы из четырех битов
Набор битов | Значение |
011 | 3 |
010 | 2 |
001 | 1 |
000 | 0 |
111 | -1 |
110 | -2 |
101 | -3 |
100 | -4 |
Набор битов | Значение |
0111 | 7 |
0110 | 6 |
0101 | 5 |
0100 | 4 |
0011 | 3 |
0010 | 2 |
0001 | 1 |
0000 | 0 |
1111 | -1 |
1110 | -2 |
1101 | -3 |
1100 | -4 |
1011 | -5 |
1010 | -6 |
1001 | -7 |
1000 | -8 |
Рис. 1.9. Таблицы кодов 3-х и 4-х битовых
Например, возьмем два числа в 4-битовом представлении 2 и -2. Они заканчиваются на 10, но запись числа 2 начинается с 00, а числа -2 — с 11. Это наблюдение может помочь найти алгоритм для получения записи отрицательного числа из записи положительного и наоборот, когда эти числа равны по модулю. Мы просто переписываем исходную последовательность справа налево до тех пор, пока не будет переписана единица, затем мы переписываем оставшиеся разряды, заменяя их дополнениями (т.е. заменяя нули на единицы, а единицы на нули). Обратите внимание, что самое маленькое отрицательное число в представлении в дополнительном коде не имеет положительного эквивалента.
Представление числа 6 и -6 в 4-битовом дополнительном коде
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
Рис. 1.10. Представление числа -6
в 4-битовом дополнительном коде
Исходя из свойств представления чисел в двоичном дополнительном коде можно представить алгоритм их декодирования.
Если знаковый бит записи равен 0, то эта последовательность двоичной записи числа.
Например, 0110 является представлением числа 6, потому что 110 является двоичной записью шести.
Если знаковый разряд равен 1, значит, перед нами отрицательное число и надо только найти его модуль. Переписываем исходную последовательность справа налево, пока не будет переписана 1, затем переписываем оставшиеся биты, дополняя их. И, наконец, расшифровываем полученную последовательность, как если бы она была двоичной записью числа.
Например, переведём последовательность 1010 в десятичную систему счисления. Сначала определяем - перед нами отрицательное число, так как знаковый разряд равен 1. Следовательно, переписываем запись как 0110. Определяем, что она является представлением числа 6, и делаем вывод о том, что исходный набор битов является представлением числа -6.
Алгоритм сложения чисел в двоичном дополнительном коде такой же, как для двоичного сложения, только здесь все коды, включая результат операции, будут иметь одинаковую длину. Это значит, что если в результате сложения появляется дополнительный бит с левого края, он будет отсечен. Именно поэтому 0101 и 0010 в сумме дают 0111, а сумма 0111 и 1011 равна 0010 (0111 + 1011 = 10010, которая усекается до 0010).
Рассмотрим примеры сложения в дополнительном коде. В каждом случае десятичная запись представлена 4-битовым кодом, а результат сложения опять переведен в десятичную систему счисления.
Обратим внимание на то, что согласно правилам традиционной алгебры, которые мы изучали в школе, то в третьем примере нам бы потребовалась совсем другая операция (вычитание). С другой стороны, в двоичном дополнительном коде мы можем вычислить результат, во всех случаях применяя алгоритм сложения.
В этом и состоит главное преимущество представления чисел в двоичном дополнительном коде: сложение любых комбинаций положительных и отрицательных чисел может быть выполнено с использованием одного алгоритма и, следовательно, одной схемы.
Сложение в десятичной системе счисления | Сложение в двоичном дополнительном коде | Результат сложения в десятичной записи |
+4 3 | +0100 0011 0111 | 7 |
+-2 -3 | +1110 1101 1011 | -5 |
+6 -2 | +0110 1110 0100 | 4 |
Рис. 1.11. Таблица сложений чисел