Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lec

.pdf
Скачиваний:
24
Добавлен:
24.03.2015
Размер:
3.43 Mб
Скачать

КОДЫ ДВОИЧНЫХ ЧИСЕЛ

1. Разрядная сетка

Все данные в центральной части ЭВМ хранятся и обрабатываются в виде двоичных кодов. Для размещения кода отводится строго фиксированное число двоичных разрядов, образующих разрядную сетку. Без привязки к разрядной сетке понятие кода не определено. Каждый разряд кода нумеруется, начиная с нуля. В разных ЭВМ принята разная система нумерации. В универсальных ЭВМ разряды нумеруются слева направо, а в мини и микро-ЭВМ – справа налево. Пример нумерации для n двоичных разрядов приведен ниже.

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

a0

a1

a2

an-2

an-1

Универсальные ЭВМ

2n-1

2n-2

2n-3

…..

21

20

Вес разрядов

 

 

 

 

 

 

Мини и микро-ЭВМ

an-1

an-2

a2

a1

a0

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

Наиболее просто кодируются целые числа без знака. В этом случае в разрядную сетку записывается двоичное представление числа. Каждая цифра числа занимает разряд в соответствии со своим весом.

Для кодирования целых чисел со знаком применяют:

Прямой код.

Обратный код.

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

2. Прямой код

Прямой n-разрядный двоичный код состоит из знакового разряда и n-1 разрядов для записи модуля числа. В качестве знакового разряда используется старший разряд.

an-1

an-2

...

a0

знак

модуль числа

Знак “плюс” кодируется как 0, а знак “минус” – как 1.

Определим диапазон чисел, представимых в прямом n-разрядном двоичном коде. Введем следующие обозначения: A+max – максимальное

положительное число, A-min - минимальное отрицательное число:

A+max = 2n-1 – 1; A-min = -(2n-1-1)

Пример: Получить прямой 5-ти разрядный код числа A[10] = - 6.Определить диапазон чисел для этой разрядной сетки.

1.| A[10] | = 6

| A[2]

| = 0110

(на запись модуля выделено 4 разряда)

2.Знаковый разряд = 1

 

3.(А[2])пр =

1 0 1

1 0

 

Определим диапазон чисел:

31

A+max = 24 – 1 = 15 A-max = -(24 – 1) = -15

Пример: Получить прямой 8-ми разрядный код числа A[16] = 3С. Определить диапазон чисел для этой разрядной сетки.

1.| A[16] | = 3С | A[2] | = 0111100

(на запись модуля выделено 7 разрядов)

2.Знаковый разряд = 0

 

 

3.(А[2])пр =

0 0 1

1 1 1 0

0

 

Определим диапазон

чисел:

 

 

A+max = 27 – 1

= 127

A-max = -(27 – 1) = -127

Прямой код для кодирования целых чисел со знаком в ЭВМ практически не применяется и используется как составная часть более сложных кодов.

Недостатки:

1. Сложение и вычитание чисел в прямом коде выполняется по правилам алгебры:

(С)пр = (А)пр + (В)пр (С)пр = (А)пр - (В)пр ,

поэтому процессор должен иметь два разных устройства: сумматор и вычитатель.

2.Знаковый разряд обрабатывается отдельно от остальных по особым правилам.

3.Неоднозначность кодировки нуля:

+0 -0

0

0

0

0

0

 

 

 

 

 

1

0

0

0

0

при n=5 при n=5

3. Обратный код

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

– это код образованный по правилу:

А2

при А2 >0

2)обр =

(2n-1) - |A2| при А2<0

Операция вида (2n – 1) - |A2| дает дополнение до наибольшего числа без знака, представимого в в n-разрядной сетке. Другими словами, кодирование числа можно выполнить следующим образом:

Для положительного числа в n-разрядную сетку записывается его двоичное представление.

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

В обоих случаях значение знакового разряда будет получено автоматически.

Пример: Получить обратные коды чисел А[10] = 4, В[10] = -6 для n = 5. Кодируем отрицательное число

1.[10]| = 6

2.[2]| = 00110

3. (В[2])обр=

1 1 1 1 1

Это инверсия модуля

- 0 0 1 1 0

 

[2])обр=

1 1 0 0 1

32

Знак 1

Кодируем положительное число

1.A[10] = 4

2.A[2] = 00100

3. (А[2])обр= 0 0 1 0 0

Знак 0

1 1 0 0 1

Замечания:

Операция дополнения для двоичного обратного кода эквивалентна инверсии всех разрядов. Инверсия удобна для реализации в операционном устройстве.

Если длина разрядной сетки кратна 4, дополнение удобно вычислять

вшестнадцатеричной системе счисления. Такая разрядная сетка характерна для большинства ЭВМ.

Если длина разрядной сетки кратна 3, дополнение удобно вычислять

ввосьмеричной системе счисления. Такая разрядная сетка не характерна для ЭВМ. Однако для мини-ЭВМ с 16-ти разрядной сеткой при документировании программ часто пользуются восьмеричной записью кодов чисел, при этом старший разряд рассматривается как двоичная цифра.

Пример: Определить обратный код числа А[10] = -21 при n=16.

Получим обратный код во всех трех указанных формах. Так как кодируется отрицательное число, необходимо вычислить дополнение и использовать его в качестве обратного кода.

Двоичное кодирование.

1.

[10]| = 21

 

 

 

 

2.

[2]|

= 10101

 

 

 

 

3.

[2]|

= 0000

0000

0001

0101

(Это модуль кодируемого числа в разрядной сет-

 

ке)

 

 

 

 

 

4. (А[2])обр= 1111 1111 1110 1010

 

 

 

F

F

E

A[16]

 

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

1. | А[10]| = 21

 

[16]| = 15

 

2. (А[16])обр = F F F F

(Это максимальное число без знака)

- 0 0 1 5

(Это модуль кодируемого числа в разрядной сетке)

F F E A

 

Восьмеричное кодирование

 

1.| А[10]| = 21 |А[8]| = 25

2. (А[8])обр =

1 7 7 7 7 7

(Это максимальное число без знака)

 

- 0 0 0 0 2 5

(Это модуль кодируемого числа в разрядной сетке)

 

1 7 7 7 5 2

 

Диапазон чисел в обратном коде составляет: A+max = 2n-1 – 1; A-min

= -(2n-1-1)

Достоинства:

1Сложение и вычитание можно выполнять на одном устройстве: сумматоре, поскольку вычитание может быть заменено сложением с допол-

нением вычитаемого:

33

(С)обр = (А)обр + (В)обр (С)обр = (А)обр - (В)обр = (А)обр + ((В)обр)обр

2 Знаковый разряд обрабатывается по общим правилам. Его значение при выполнении операции устанавливается автоматически.

Недостатки:

Неоднозначность кодировки нуля:

+0 -0

0

0

0

0

0

 

 

 

 

 

1

1

1

1

1

при n=5 при n=5

Чаще всего в ЭВМ используется модификация обратного кода – дополнительный код.

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

Дополнительный код обладает всеми достоинствами обратного и устраняет его главный недостаток – неоднозначность кодирования нуля. Дополнительный n-разрядный двоичный код представляет собой код, образованный по правилу:

А2

при А2 > 0

2)доп =

 

2n - |A2|

при А2<0

Операция 2n – |A2| называется операцией дополнения до следующего за большим числом без знака для данной разрядной сетки. Другими словами, кодирование числа можно выполнить следующим образом:

Для положительного числа в n-разрядную сетку занести его двоичное представление.

Для отрицательного числа в n-разрядную сетку занести разность между следующим

за большим числом без знака и модулем кодируемого числа. Дополнение при использовании дополнительного кода больше по значе-

нию на 1 от дополнения при использовании обратного кода:

( 2n – 1 ) - |A2| + 1 = 2n - |A2|

Дополнение при обратном

Дополнение при дополнительном ко-

коде

де

Cледствие: дополнительный код отрицательного числа может быть по-

лучен из его обратного кода путем прибавления единицы в младший разряд.

Пример: Определить дополнительный код числа А[16] = -1D8 при n=16.

Кодируется отрицательное число, следовательно, необходимо вычислить дополнение и использовать его в качестве кода.

Двоичное кодирование.

1.[16]| = 1D8

2.[2]| = 111011000

3.

[2]|

=

0000

0001

1101

1000

 

(Это модуль кодируемого числа в разрядной сетке)

4.

[2])обр= 1111 1110 0010 0111

(Это обратный код)

 

 

 

+

 

 

1

 

 

 

[2])доп=

1111 1110 0010 1000

 

(Это дополнительный код)

 

 

 

F

E

2

8[16]

 

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

 

1.

| А[16]|

= 1D8

 

 

 

 

 

2.

[16])обр

F

F F F

 

 

 

(Это максимальное число без знака)

 

 

 

- 0 1 D 8

 

 

 

(Это модуль кодируемого числа в разрядной сетке)

 

 

 

F E 2 7

 

 

 

(Это обратный код)

34

 

[16])доп=

+

1

 

 

(Это дополнительный код)

 

 

 

F E

2 8

 

 

Восьмеричное кодирование

 

1.

| А[8]| = 730

 

 

 

 

 

 

 

2.

[8])обр =

1 7 7 7 7 7

 

(Это максимальное число без знака)

 

 

- 0 0 0 7 3 0

(Это модуль кодируемого числа в разрядной сетке)

 

 

1 7 7 0 4 7

 

(Это обратный код)

 

[8])доп=

+

 

1

 

(Это дополнительный код)

 

 

1 7 7 0 5 0

 

Дополнительный код обеспечивает однозначное представление нуля:

+0

0

0

0

0

0

при n=5

-0

 

 

 

 

 

при n=5

1

1

1

1

1

+1

0 0 0 0 0

Диапазон представимых чисел в дополнительном коде: A+max = 2n-1

1; A-min = -2n-1

5. Операции сложения и вычитания в дополнительном коде.

Операции сложения и вычитания производятся путем арифметического сложения кодов чисел. При вычитании перед выполнением операции для вычитаемого берется дополнение. Результат операции представлен в дополнительном коде.

(С)доп = (А)доп + (В)доп

 

 

 

 

 

(С)доп = (А)доп - (В)доп =

(А)доп + ((В)доп)доп

Пример: вычислить С=А+В и D=A-B. Исходные числа А[10]=3, В[10]= -4. Сетка n=5.

Определим дополнительный код для А и В.

 

 

 

 

 

1. A[10] = 3

1. |B[10]| = 4,

 

 

 

 

 

A[2] =11

|B[2]| = 100

 

 

 

 

 

2. (A[2])доп = 00011

2. (B[2])доп = 00100

 

 

 

 

 

11011

 

 

 

 

 

+

1

 

 

 

 

 

11100

 

 

 

Выполним сложение

(А) +

Наличие единицы в знаковом разряде результата сви-

(В):

 

детельствует о том, что результат представляет собой

 

код отрицательного числа. Определим десятичный

00011

 

 

эквивалент результата.

Для этого возьмем дополне-

+11100

 

 

ние для результата.

 

 

 

 

 

 

 

11111

 

 

 

(Инверсия) 00000

 

 

 

 

 

+

1

 

Результат равен –1.

 

 

 

 

00001 1[10]

Выполним вычитание (А) - (В):

Берем дополнение от (В[2])доп

((В[2])доп)доп = 11100 (Инверсия) 00011

+ 1 00100

Сложим

[2])доп+(В[2])доп)доп

00011

+00100

Наличие нуля в знаковом разряде результата свидетельствует о том, что результат представляет собой код положительного числа. Определим десятичный эквивалент результата. Для этого достаточно преоб-

35

36
(B[16])доп=FFFF -01AЕ
FE51 + 1 FE52

разовать двоичный результат в десятичное число. Результат равен +7.

Т.к. разрядная сетка ограничена, то при сложении кодов одинакового знака значение результата может выйти за границы диапазона чисел в данной разрядной сетке. Такая ситуация называется переполнением и обнаруживается по одному из признаков:

1.Знаковые разряды слагаемых одинаковы, а знак результата противоположный.

2.Наличие переноса в знаковый разряд и отсутствие переноса из знакового разряда.

Знак

Этот признак легко реализуется аппаратным способом в сумматоре. Обычно при возникновении переполнении формируется специальный сигнал. Однако во многих ЭВМ этот сигнал игнорируется. В этом случае контроль диапазонов данных и результата возлагается на программиста.

Пример. Даны числа A[10])=342 и B[10]= -430. Длина разрядной сетки 16. Представить числа в дополнительном коде и выполнить операции сложения A+B и вычитания A-B. Полу-

чить десятичные эквиваленты результатов операций.

A[10]= 342, следовательно A[16]= 156 и A[8]= 526

B[10]= -430, следовательно B[16]= -1AE и B[8]= -656

Шестнадцатеричное кодирование Определим дополнительные коды чисел и заранее подготовим дополнение для кода вычитаемого:

[16])доп=0156 ((B[16])доп)доп=FFFF - FE52

01AD + 1 01AЕ

Cложение (А)доп+(В)доп

0156

+FE52

FFA8

Старший двоичный разряд результата равен единице. Результат соответствует отрицательному числу. Берем дополнение для него:

FFFF

-FFA8

0057

+1

0058

Результат= (80+8)= 88

Восьмеричное кодирование

[8])доп=000526 (B[8])доп=177777 -000656

177121 + 1

177122

Cложение (А)доп+(В)доп

000526

+177122

177650

Старший двоичный разряд результата равен единице. Результат соответствует отрицательному числу. Берем дополнение для него:

177777

-177650

000127

+1

000130

Результат= (64+24)= 88

Вычитание, т.е. (А)доп+((В)доп)доп

015 6 +01AE 03 04

Старший двоичный разряд результата равен нулю. Результат соответствует положительному числу.

Результат= (3*256+4)=772[10]

((B[8])доп)доп= 177777

-177122

000655

+1

000656

Вычитание, т.е. (А)доп+((В)доп)доп

000526

+000656

001404

Старший двоичный разряд результата равен нулю. Результат соответствует положительному числу.

Результат= (1*512+4*64+4)=772[10]

Пример. В ЭВМ выполнена операция сложения A+B=R. Числа представлены в дополнительном коде. Длина разрядной сетки 16. Код первого слагаемого (А[16])доп=006D, а код результата (R[16])доп=005E. Определить код второго слагаемого и десятичные эквиваленты слагаемых и результата.

(R)доп=(А)доп+(В)доп, отсюда (B)доп=(R)доп-(A)доп или

(B)доп=(R)доп+((A)доп))доп.

((A[16])доп)доп=FFFF -006D

FF92 + 1 FF93

Коды первого слагаемого и результата соответствуют положительным числам. A[10] = 6 161 + 13 160 = 109

37

R[10] = 5 161 + 14 160 = 94

Cложим . (R)доп+((A)доп)доп

005E

+FF93

FFF1

Старший двоичный разряд кода B равен единице. Слагаемое B соответствует отрицательному числу. Берем дополнение для него:

FFFF

-FFF1

000E

+1

000F

Слагаемое B = 15

6.Двоично-десятичный код

Внекоторых универсальных ЭВМ для кодирования целых чисел применяется смешанный двоично-десятичный код. Своим появлением дво- ично-десятичный код обязан стремлению производить запись и обработку целых чисел в привычной для человека десятичной системе счисления. Десятичные цифры в этом коде представлены четырехразрядными двоичными числами.

Для кодировки знака используется дополнительная группа бит, расположенная за младшей десятичной цифрой. Знак положительных чисел кодируется как "1100" (С), а знак отрицательных чисел как "1101" (D). Суммарная длина кода должна быть кратна байту. Если длина полученного кода не кратна байту, то перед старшей десятичной цифрой числа добавляется незначащий десятичный ноль.

Пример: Записать число А10 = 951 в двоично-десятичном коде. Код представить в двоичной и шестнадцатеричной форме.

9

5

1

C

цифра

цифра

цифра

знак

1001

0101

0001

1100

Пример: Записать число А10 = -87 в двоично-десятичном коде. Код представить в двоичной и шестнадцатеричной форме.

0

8

7

D

цифра

цифра

цифра

Знак

0000

1000

0111

1101

38

ПРЕДСТАВЛЕНИЕ ДАННЫХ В ЦЕНТРАЛЬНОЙ ЧАСТИ ЭВМ

1.Понятие формата данных

ЭВМ оперирует данными, представленными в виде двоичных кодов. Каждому типу данных соответствует свой формат представления (в дальнейшем просто формат). Базовыми типами данных являются числовые данные. Формат однозначно определяет количество разрядов в коде числа и правила кодирования данных. Числовые типы данных делятся на две группы: целые числа и вещественные числа.

2. Представление целых чисел

Для представления целых чисел используется формат с фиксированной точкой и двоично-десятичный формат.

Формат с фиксированной точкой. Разрядная сетка имеет строго фиксированное число разрядов. Типичные разрядные сетки: 1байт, 2 байта, 4байта. Положение точки подразумевается справа от младшего разряда. Формат с фиксированной точкой используется для кодирования целых чисел без знака и целых чисел со знаком.

Целые числа без знака. В разрядную сетку записывается двоичное представление числа. Диапазон целых чисел без знака для типичных разрядных сеток показан в таблице 1.

 

 

Таблица 1

Разрядность,

Диапазон значений

(байт)

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

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

1

0

255

2

0

65 535

4

0

4 294 967 295

Целые числа со знаком. В разрядную сетку записывается дополнительный код числа. Диапазон целых чисел со знаком для типичных разрядных сеток показан в таблице 2.

 

 

Таблица 2

Разрядность,

Диапазон значений

(байт)

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

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

1

-128

127

2

-32 768

32 767

4

-2 147 483 648

2 147 483 647

Формат с фиксированной точкой является основным форматом представления целых чисел в ЭВМ.

Двоично-десятичный формат. Количество разрядов заранее не фиксируется и зависит от количества десятичных цифр в кодируемом числе. Данный формат соответствует двоично-десятичному коду числа. В силу сложности и трудоемкости выполнения арифметических операций двоично-десятичный формат используется редко и в дальнейшем не рассматривается.

3. Представление вещественных чисел

Для представления вещественных чисел используется формат с плавающей точкой. Вещественные числа всегда рассматриваются как числа со знаком. Разрядная сетка имеет строго фиксированное число разрядов.

39

В основе формата лежит представление чисел в экспоненциальной (научной) форме. Число в этой форме записывается в виде мантиссы и

порядка:

A = ± MS ± P,

где M – мантисса,

S – основание системы счисления, p – порядок.

[10]= 0.0225•103 = 0.225•102 = 2.25•101 = 22.5•100 =225•10-

1= 22.5

Вформате с плавающей точкой кодируется: мантисса, порядок, знак числа и знак порядка. На каждую из кодируемых компонент отводится строго фиксированное число разрядов. Основание системы счисления заранее оговаривается и не кодируется.

Фиксированная по длине мантисса позволяет закодировать ограниченное количество значащих цифр. Поэтому вещественные числа в общем случае хранятся и обрабатываются с определенной степенью точности. Точность определяется способом кодировки мантиссы, а диапазон чисел – способом кодировки порядка.

Способ кодировки мантиссы и порядка в различных ЭВМ может быть разным. Отметим общие подходы при кодировании вещественных чисел.

Кодируемое число предварительно нормализуется. За счет сдвига мантиссы и изменения порядка добиваются выполнения условия

S-1≤|M|<1. ( 1)

Врассмотренном примере этому условию соответствует запись числа

ввиде A[10] = 0.225•102.

Внормализованном числе целая часть мантиссы будет нулем, а стар-

шая цифра дробной части будет отличной от нуля. Этот прием позволяет отказаться от хранения целой части и закодировать в мантиссе максимально возможное количество значащих цифр, то есть добиться максимальной точности. Мантисса записывается в прямом коде, причем знак мантиссы (он же знак числа) заносится в старший разряд. Знак положительного числа кодируется как 0, а знак отрицательного – как 1.

Порядок кодируется в виде так называемой характеристики. Характеристика Z представляет собой смещенный порядок: Z = P + D. Величина смещения D подбирается так, чтобы характеристика для минимального порядка была равна нулю. Этот прием позволяет использовать в качестве характеристики число без знака и не кодировать специально знак порядка. Обобщенный вид формата с плавающей точкой показан на рисунке:

 

n-1

0 m-1

0

Знак числа

Характеристика

 

 

Мантисса

Типичные для персональных ЭВМ варианты формата с плавающей точкой приведены в таблице 3.

Таблица 3

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]