Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-основы ИНФОРМАТИКА.doc
Скачиваний:
121
Добавлен:
09.04.2015
Размер:
868.35 Кб
Скачать

3.3. Двоичная система счисления

Столь привычная для нас десятичная система оказалась неудобной для ЭВМ. Если в механических вычислительных устройствах, использующих десятичную систему, достаточно просто применить элемент со множеством состояний (колесо с девятью зубьями), то в электронных машинах надо было бы иметь 10 различных потенциалов в цепях. Наиболее просто реализуются элементы с двумя состояниями - триггеры. Поэтому естественным был переход на двоичную систему, т.е. систему по основанию 2. В этой системе всего две цифры - 0 и 1. Каждая цифра называется двоичной (от английского binary digit - двоичная цифра). Сокращение от этого выражения (binary digit, bit) привело к появлению термина бит, ставшего названием разряда двоичного числа. Веса разрядов в двоичной системе изменяется по степеням двойки. Поскольку вес каждого разряда умножается либо на 1, либо на 0, то в результате значение числа определяется как сумма соответствующих значений степеней двойки. Ниже в таблице показаны значения весов для 8-pазpядного числа (1 байт).

Номер разряда

7

6

5

4

3

2

1

0

Степень двойки

2+7

2+6

2+5

2+4

2+3

2+2

2+1

2+0

Значение позиции

128

64

32

16

8

4

2

1

Если разряд двоичного числа равен 1, то он называется значащим разрядом. Ниже показан примернакопления суммарного значения числа за счет значащих битов:

Двоичное число

1 0 0 1 0 0 0 1

Степень двойки

128 64 32 16 8 4 2 1

Значения,

входящие

в сумму

128 +16+1

Значение числа

145

Нетрудно догадаться, что максимальное значение двоичного числа ограничено числом его разрядов и определяется по формуле M=2n-1, гдеn-число разрядов. В вычислительной технике эти числа имеют фиксированные значения 4, 8, 16, 32 и т.д., а соответствующие им числа будут иметь следующие максимальные значения:

Количество разрядов

Максимальное значение числа

Название числа

4

15

Полубайт

8

255

Байт

16

65535

Слово

32

4294967295

Двойное слово

3.4. Арифметические действия и коды чисел

Арифметические действия, выполняемые в двоичной системе, подчиняются тем же основным правилам, что и в десятичной системе. Только в двоичной системе перенос единиц в старший разряд происходит несравнимо чаще. Вот как выглядит таблица сложенияв двоичной системе:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 0 + перенос=1

Примеры.

11010 10111

+10010 +1000

101100 11111

Для упрощения аппаратных средств современных вычислительных машин их арифметические устройства не содержат специальных схем выполнения вычитания. Эта операция производится тем же устройством, которое выполняет сложение, т.е. сумматором. Но для этого вычитаемое должно быть преобразовано из прямого кода, с которым мы познакомились выше, в специальный код. Ведь в десятичной системе тоже приходится преобразовывать числа: сравните: 13 - 5 и 13 + (-5). Такой обратный кодв двоичной системе получают путем изменения в числе всех разрядов на противоположные - операцииинвертирования.Например, инвертирование числа 0101 даст число 1010. Опыт выполнения операций над числами в обратном коде показал, что они требуют ряда дополнительных преобразований, неизбежно ведущих к усложнению аппаратных средств. Поэтому широкого распространения этот код не получил.

При выполнении математических действий результат может получиться не только положительным, но и отрицательным. Как же представить знак минус в схемах машины, если в них фиксируется лишь два состояния - 1 и 0? Договорились знак числа определять самым левым битом. Если число положительное, то этот бит (знаковый) равен нулю (сброшен), если отрицательное - единице (установлен). Решение о введении знакового разряда сказалось на максимальных величинах представляемых чисел. Максимальное положительное 16-битное число равно +32767, а отрицательное –32768. Оказалось, что наиболее удобно оперировать двоичными данными в дополнительном коде. Единственная сложность - надо прибавить единицу к обратному коду числа - получится дополнительный код.

Десятичное число

Прямой код

Обратный код

Дополнительный код

-8

-

-

1000

-7

1111

1000

1001

-6

1110

1001

1010

-5

1101

1010

1011

-4

1100

1011

1110

-3

1011

1100

1101

-2

1010

1101

1110

-1

1001

1110

1111

-0

1000

1111

0000

+0

0000

0000

0000

1

0001

0001

0001

2

0010

0010

0010

3

0011

0011

0011

4

0100

0100

0100

5

0101

0101

0101

6

0110

0110

0110

7

0111

0111

0111

В таблице приведены десятичные числа и их двоичные представления в трех различных формах. Интересно в ней вот что. Если начать счет с числа 1000 (-8) и двигаться вниз по столбцам, то в дополнительном коде каждое последующее число получается прибавлением единицы к предыдущему без учета переноса за пределы четвертого разряда. Так просто эту операцию в прямом и обратном кодах не осуществить. Эта особенность дополнительного кода и явилось причиной предпочтительного применения его в современных ЭВМ.

Итак, числа, представленные в дополнительном коде, складываются по правилам двоичного сложения, но без учета каких либо переносов за пределы старшего разряда. Рассмотрим это на следующих примерах:

+2 0010 -2 1110

+ + + +

+5 0101 -6 1010

+7 0111 -8 1000

+5 0101 +3 0011

+ + + +

-4 1100 -7 1001

+1 0001 -4 1100

Еще одним достоинством дополнительного кода является то, что нуль, в отличие от прямого и обратного кодов, представляется одним кодом. Наличие 0 в знаковом бите при представлении нуля определяет его как величину положительную, что согласуется с математической теорией чисел и соглашениями, принятыми во всех зыках программирования.

Подытоживая наше знакомство с дополнительным кодом, обобщим величину десятичного значения числа в дополнительном коде. Так как вес старшего, т.е. значащего разряда в данном случае равен –2n-1, а не+2n-1, как в прямом коде, то диапазон представления чисел охватывает значения от–2n-1 до +2n-1-1.

Умножениедвоичных чисел происходит еще проще, чем сложение, ведь они обладают рекордно малой таблицей умножения:

Множимое

Множитель

Произведение

0

0

0

0

1

0

1

0

0

1

1

1

Другими словами, процедура умножения сводится к записи 0, если разряд множителя равен 0, или 1, если разряд =1.

Двоичное делениесводится к выполнению операций умножения и вычитания, как в десятичной системе. Выполнение этой процедуры - выбор числа, кратного делителю, и предназначенного для уменьшения делимого, здесь проще, так как таким числом может быть либо 0, либо сам делитель.

Для деления чисел со знаком в дополнительном коде существует несколько методов. Простейший из них - преобразование чисел в положительные с последующим восстановлением знака результата. При наладке аппаратных средств (программ BIOS и т.д.) и написании новых программ (особенно на языках низкого уровня типа ассемблера) часто возникает необходимость заглянуть в память машины, чтобы оценить ее текущее состояние. Но там все заполнено длинными последовательностями нулей и единиц, очень неудобных для восприятия. Кроме того, естественные возможности человеческого мышления не позволяют оценить быстро и точно величину числа, представленного, например, комбинацией из 16 нулей и единиц. Для облегчения восприятия двоичного числа решили разбить его на группы разрядов, например, по три или четыре разряда. Эта идея оказалась удачной, так как последовательность из 3 бит имеет 8 комбинаций, а последовательность из 4 бит - 16 комбинаций. Числа 8 и 16 - степени двойки, поэтому легко находить соответствие между двоичными числами. Развивая эту идею, пришли к выводу, что группы разрядов можно закодировать, сократив при этом последовательность знаков. Для кодировки трех битов (триад) требуется 8 цифр, и поэтому взяли цифры от 0 до 7 десятичной системы. Для кодировки четырех битов (тетрад) необходимо 16 знаков, и взяли 10 цифр десятичной системы и 6 букв латинского алфавита: A, B, C, D, E, F. Полученные системы, имеющие в основании 8 и 16, назвали соответственно восьмеричной и шестнадцатеричной.

Десятичное

Восьмеричное

Триады

Шестнадцатеричное

Тетрада

0

0

000 000

0

0000

1

1

000 001

1

0001

2

2

000 010

2

0010

3

3

000 011

3

0011

4

4

000 100

4

0100

5

5

000 101

5

0101

6

6

000 110

6

0110

7

7

000 111

7

0111

8

10

001 000

8

1000

9

11

001 001

9

1001

10

12

001 010

10

1010

11

13

001 011

A

1011

12

14

001 100

B

1100

13

15

001 101

C

1101

14

16

001 110

D

1110

15

17

001 111

E

1111

16

20

010 000

F

1 0000

В таблице приведены числа в десятичной, восьмеричной и шестнадцатеричной системах и соответствующие группы бит в двоичной системе.

16-pазpядное двоичное число со знаковым разрядом можно представить 6-pазpядным восьмеричным, причем старший байт в нем будет принимать значения лишь 0 или 1. В шестнадцатеричной системе такое число займет 4 разряда.

Легкость преобразования двоичных чисел в восьмеричные и шестнадцатеричные видна из следующего примера:

1100001111010110

1100 0011 1101 0110 1 100 011 111 010 110

C3D6 1 4 1 7 2 6

Из этого примера следует, что для преобразования двоичного числа в восьмеричное необходимо двоичную последовательность разбить на триады справа налево и каждую группу заменить соответствующей восьмеричной цифрой. Аналогично поступаем и при преобразовании в шестнадцатеричный код, только двоичную последовательность разбиваем на тетрады и для замены используем шестнадцатеричные знаки.

Также просто осуществляется и обратное преобразование. Для этого каждую цифру восьмеричного или шестнадцатеричного числа заменяют группой из 3 или 4 бит.

Например:

A B 5 1 1 7 7 2 0 4

1010 1011 0101 0001 1 111 111 010 000 100

Арифметические операции над числами в восьмеричной или шестнадцатеричной системах проводятся по тем же правилам, что и в десятичной системе. Только надо помнить, что если имеет место перенос, то он производится не после 10, а после 8 или 16.

Например:

C0A5

+ 2 4 8 6

E5 2B

перенос

Для перевода из десятичной системы в другую систему обычно применяется метод последовательного деления исходного числа на основание системы счисления, в которую переводится число. Полученный остаток после первого деления является младшим разрядом нового числа. Образовавшееся частное снова делится на основание. Из остатка получаем следующий разряд и т.д. Например:

212 2

212 106 2

0 106 53 2

0 52 26 2

1 26 13 2

0 0 12 6 2

1 6 3 2

0 2 1 (старший разряд)

1

21210= 110101002

А теперь переведем десятичное число 31318 в восьмеричную систему:

31318 8

31312 3914 8

6 3912 489 8

2 488 61 8

1 56 7 (старший разряд)

5

3131810= 751268

Перевод из одной системы в другую дробных чисел производится по правилу, требующему не делить, а умножать дробную часть на величину нового основания. В качестве примера переведем десятичное число 2638.75 в шестнадцатеричную систему. Это действие производится в два этапа - сначала для целой, а затем для дробной части:

2638 16 0.7516=12

2624 164 16

14 160 10 (старший разряд целой части)

4

2638.7510=A4E.C16