Смекни!
smekni.com

Теоретические основы информатики 3 (стр. 7 из 11)

(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

1.1.8. Хранение целых чисел

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

Наиболее распространенной системой представления целых чисел в современ­ных компьютерах является представление в двоичном дополнительном коде (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.

1.1.8.2. Сложение в двоичном дополнительном коде

Алгоритм сложения чисел в двоичном дополнительном коде такой же, как для двоичного сложения, только здесь все коды, включая результат операции, будут иметь одинаковую длину. Это значит, что если в ре­зультате сложения появляется дополнительный бит с левого края, он будет отсе­чен. Именно поэтому 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. Таблица сложений чисел