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

Методы / Мышев А.В. (ч.1)

.pdf
Скачиваний:
37
Добавлен:
11.06.2015
Размер:
864.53 Кб
Скачать

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

Пример 1.12. Найти дополнительный код числа -1408 (n=16).

Аналогичные правила (пятое и шестое) справедливы и для перехода от дополнительного кода отрицательного числа к симметричному положительному числу. Поэтому, если исходить из дополнительного кода числа, пятое, шестое и седьмое правила превращаются в правила изменения знака числа. Обычно эта операция имеет мнемоническое обозначение NEG (от negate-изменить знак).

Отметим, что в дополнительном коде

-число ноль имеет единственное представление 00...00;

-максимальное по модулю отрицательное число -2n-1 не имеет симметричного положительного числа, поэтому применительно к нему в операции изменения знака фиксируется особый случай;

-инкремент (увеличение на 1) максимального положительного чис-

ла +( 2n1 1) как результат дает 2n-1, т.е. максимальное по модулю отрицательное число, поэтому операция инкремента (и декремента, т.е. уменьшения на 1) применима только к беззнаковым числам.

Очень широкое применение дополнительного кода в современных компьютерах объясняется следующими двумя основными причинами. Во-первых, при сложении дополнительных кодов слагаемых как беззнаковых целых чисел получается дополнительный код суммы (если, конечно, переполнение исключено): XДК+YДК=(X+Y)ДК.

При этом знаковые биты суммируются обычным образом, а возникающий при их сложении перенос игнорируется.

21

Во-вторых, любое число в дополнительном коде можно считать младшими битами («хвостом») числа любой длины, если содержимое знакового бита копировать влево.

Пример1.13. Сложитьвдополнительномкодечисла+2500 и-1200 (n=16).

Пример 1.14. Найти десятичный эквивалент числа X ДК = А2.

X ДК

1010

0010

А2

X

-0101

1110

-5E

Получилось число -94.

Скопируем знаковый бит 8 раз влево, т.е. сделаем длину числа равной 16, и найдем десятичный эквивалент полученного числа.

X ДК

1111

1111

1010

0010

FFA2

X

-0000

0000

0101

1110

-005E

В результате получается такое же число -94.

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

В заключение отметим, что понятие дополнительного кода распространяется на системы счисления с любым основанием q. При этом во всех выкладках вместо двух будет фигурировать число q.

X ДК = q n X .

Операция инвертирования цифры превращается здесь в нахождение дополнений до q -1.

22

Пример 1.15. Найти десятичный дополнительный код числа -638 (n=5).

Пример 1.16. Найти шестнадцатеричный дополнительный код числа

-ЗА7 (n=4).

Целые знаковые числа применяются в программах для представления тех числовых объектов, которые принципиально не могут иметь дробной части, но могут быть положительными и отрицательными. В языках программирования высокого уровня такие числа должны записываться без десятичной точки и объявляются спецификаторами типа SINT (n=8), INTEGER или INT (n=16), LONG или INTEGER4 (n=32).

1.3. Десятичные числа

Как уже отмечалось, существует противоречие между машинным представлением чисел (двоичная система счисления) и представлением чисел в нашей повседневной жизни (десятичные числа). Преобразования между ними в случае большого объема входных данных и выходных результатов ведет к заметным потерям процессорного времени. Вместе с тем имеется обширный круг задач, характеризующихся значительными объемами числовых данных и сравнительно простой их обработкой (экономические задачи, статистические расчеты, бухгалтерские выкладки и т. п.). В связи с этим потребовалось разработать такие формы представления чисел, в которых каким-либо образом совмещались бы двоичная и десятичная системы счисления. Такие формы получили общее название двоично-кодированного десятичного (Binary-Coded Decimal) представления или ВСD-кодирования. Общее свойство этих форм заключается в том, что за основу берется десятичное число, и каждая его цифра изображается тем или иным двоичным эквивалентом. К

23

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

Упакованные десятичные числа. В упакованном формате, ко-

торый часто называют ВСD-представлением десятичных чисел, байт содержит две десятичные цифры. Младшая цифра занимает правую тетраду (биты 3:0), старшая – левую тетраду (биты 7:4). Обе цифры представлены своими двоичными эквивалентами, называемыми также кодом 8421 (по двоичным весам). Размещение десятичных цифр в байте показано на рис. 1.12, а.

Рис. 1.12. Формат упакованных десятичных чисел:

а - кодирование байта, б - многоразрядное число, в - размещение его в памяти

Многоразрядные упакованные десятичные числа занимают несколько смежных байтов. При необходимости работы со знаковыми числами старшая тетрада (иногда – младшая) старшего байта отводится для знака числа (рис. 1.12,6). Для кодирования знака используют шесть запрещенных тетрад 1010-1111 (или A-F), не представляющих десятичных цифр. Обычно для изображения знака плюс применяется код 1100 (С), а знака минус – 1101 (D). В связи с

24

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

При программировании упакованные десятичные числа обычно определяются начальным адресом DNUM (это адрес младшего байта) и числом байтов N. Размещение упакованного десятичного числа в памяти показано на рис. 1.12, в.

Неупакованные десятичные числа. Неупакованный десятич-

ный формат, называемый также символьным кодом и кодом ASCII (в переводной литературе), приведен на рис. 1.13. Здесь байт содержит одну десятичную цифру, представленную в коде КОИ-7 (рис. 1.13, а). В этом коде десятичным цифрам соответствуют двоичные наборы от 0011 0000 (цифра 0) до 0011 1001 (цифра 9), или в шестнадцатеричной системе от 30Н до 39Н. Следовательно, можно считать, что собственно значение десятичной цифры занимает младшую тетраду и дается ее двоичным эквивалентом, а в старшей тетраде находится комбинация 0011.

Рис. 1.13. Формат неупакованных десятичных чисел:

а - кодирование байта, б - многоразрядное число, в - размещение его в памяти

Многоразрядные неупакованные десятичные числа занимают смежные байты (рис.1.13,6). Для знака числа отводится старший

25

байт, в котором комбинация 00101011 (2ВН) обозначает знак плюс, а комбинация 00101101 (20Н) – знак минус. Такие числа определяются в программах их начальным адресом DNUM и числом разрядов (байтов) или длиной N. Размещение неупакованного десятичного числа в памяти показано на рис.1.13, в.

1.4. Форматы чисел с плавающей точкой

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

ваемый полулогарифмическим или экспоненциальным форматом или же научной записью.

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

X = +0.000035 = +3.5 ×105 =0.35 ×104 = +35 ×106 =...

X = −19000000 = −19 ×10+6 = −1.9 ×10+7 = −0.19 ×10+8 =...

Здесь число Х изображается как произведение некоторого другого числа на степень 10, т.е. основания системы счисления. Поскольку основание системы счисления известно, его можно не указывать, а взять от второго сомножителя только показатель степени. Другими словами, первый сомножитель записывается как есть, а от второго сомножителя 10±N записывается только ±N, т.е. его десятичный логарифм, что объясняет термин «полулогарифмический формат». Чтобы не путать знак показателя степени со знаком арифметической операции (сложение или вычитание), перед показателем степени принято записывать букву Е (от слова Ехроnent – показатель степени, экспонента), следовательно, число записывается в виде

± МЕ ± П.

Число ±М называется мантиссой (или значащей частью), которая может быть любым знаковым числом: целым, правильной дробью или смешанным числом. Нетрудно заметить, что знак мантиссы определяет знак всего числа. Число ±П называется порядком

26

(экспонентой); порядок может быть только целым знаковым числом. Буква Е – разделитель мантиссы и порядка. Чтобы сообщить о представлении числа с повышенной или двойной точностью, вместо буквы Е записывается буква D (от слова Double – двойной). В этом случае для мантиссы отводится больше разрядов.

Порядок ±П определяет истинное или фактическое положение десятичной точки вместо положения, которое она занимает в изображении мантиссы. Если порядок положительный, точка перемещается («плывет» – отсюда и название «плавающая точка») вправо на число разрядов, равное значению порядка.

Пример 1.17. Найти значение числа -0,0956 Е+2.

0.0956Ε + 2 = −0.0956 ×10+2 = −009.56 = −9.56

Если порядок отрицательный, точка перемещается («плывет») влево. Пример 1.18. Найти значение числа +1.289 Е-3.

+1.289Ε − 3 = +1.289 ×103 = +0.001289

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

счисления служит число 2:

± М ×2±П = ±МЕ ± П.

Как и в десятичной системе счисления, порядок определяет истинное положение двоичной точки, а перемещение ее осуществляется по двоичным разрядам.

Пример 1.19. Найти десятичные эквиваленты двоичных чисел с плавающей точкой.

0.000101Ε +100 = −0.000101 = −1 14

+10.111Ε - 11 = +0.010111 = +2364

Рассмотренное представление чисел имеет один существенный недостаток – запись числа оказывается неоднозначной.

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

27

мера этим требованиям удовлетворяют только числа -0.353 Е+2 и 0.1012 Е+112.

Пример 1.20. Эквивалентные формы чисел с плавающей точкой.

35.5 = −0.353 Ε + 2 = −0.00353 Ε + 4 = −35300 Ε − 2 =...

+1012 = +0.1012 Ε +112 = +0.001012 Ε +1012 = +1010.02 Ε −1 = ...

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

Пример 1.21. Пусть длина мантиссы составляет 6 битов. Определить нормализованное и ненормализованное представление числа +43 (+1010112).

Нормализованное представление: +0.1010112 Е+1102 Ненормализованное представление: +0.000101 0112 Е+10012 Во втором случае три младших бита мантиссы оказываются потерян-

ными и истинное значение числа равно + 645 × 2+9 = 40 , а не 43!

Классический формат с плавающей точкой. Формат чисел с плавающей точкой, который применялся в компьютерах первого и второго поколений, представлен на рис. 1.14. Он состоит из 4 полей: знак мантиссы Sм (он совпадает со знаком всего числа), п - битная мантисса, являющаяся правильной дробью, знак порядка Sм и p- битный порядок, который является целым числом.

Рис. 1.14. Классический формат чисел с плавающей точкой

Мантисса и порядок представлены в прямом коде – знак и абсолютное значение.

Пример 1.22. Пусть n=5 и p=3. Найти десятичные эквиваленты чисел с плавающей точкой.

1 11011 0 101 мантисса = 27

, порядок = +5,

32

 

число = 27 32 × 2+5 = −27

28

0

11000

1

100

мантисса = +

3

, порядок = -4,

 

 

 

 

 

4

 

 

 

 

 

число = + 3

× 2

4 = + 3

 

 

 

 

4

 

64

0

11111

0

111

мантисса = 31

, порядок = +7,

 

 

 

 

 

32

 

 

 

 

 

число = 31

× 2+7 = +124

 

 

 

 

32

 

 

0

10000

1

111

мантисса = +

1

, порядок = -7,

 

 

 

 

 

2

 

 

 

 

 

число = + 1

× 2

7 = + 1

 

 

 

 

2

 

256

Пример 1.23. Произвести обратное преобразование для того же фор-

мата с n=5 и p=3.

 

 

 

 

 

Число = 3

128

, двоичное представление

0.0000011

мантисса

 

 

2

 

= −0.11000 = − 3

 

, порядок = -1012=-5 1 11000

1 101

 

4

 

 

 

 

Число = +47.5, двоичное представление +101111.12 мантисса = +0.10111112= + 2332 , порядок = +1.102 = +6 0 10111 0 110

Последний пример показывает, что число +47.5 невозможно точно представить с принятым количеством битов мантиссы. Вместо него (без учета округления) представляется число +46.

Определим диапазон нормализованных чисел в формате, имеющем р битов порядка и п битов мантиссы. Поскольку для прямого кода диапазон симметричен относительно нуля, производятся расчеты только для положительных чисел. Минимальное число получается, если взять минимальную мантиссу и максимальный (по абсолютному значению) отрицательный порядок, т.е.

Хмин = 0 100…00 1 11…11

Здесь мантисса равна + 12 , а порядок (2 p 1) , поэтому

X мин + 12 ×2(2 p 1) =22 p

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

Хмакс = 0 111...11 0 11...11

29

Нетрудно установить, что

X макс =+(1 2n ) ×22 p1.

Если в мантиссе пренебречь членом 2n , то

X макс 22 p1.

Найденные для Хмин и Хмакс соотношения показывают, что диапазон представимых чисел определяется только количеством р битов порядка. С увеличением р диапазон очень быстро расширяется как в область очень больших, так и в область очень малых чисел. Воспользовавшись приближенным равенством 210≈103, покажем, насколько быстро расширяется диапазон:

p = 6

Хмин = 2

26

 

= 264 1019 ,

 

Хмакс

2

26 1

 

= 2

63

 

19

,

 

 

 

 

 

 

 

10

 

 

p = 7

Хмин = 227

= 2128

 

1038 ,

 

Хмакс

2

27

1

 

127

10

38

,

 

 

 

 

= 2

 

 

 

p = 8

Хмин = 228

= 2256 1076 ,

 

Хмакс

228 1 = 2255

1076

 

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

Рассмотрим, на что влияет количество битов мантиссы п. Возьмем любое число Х в формате с плавающей точкой X = М×2П. На числовой оси ему соответствует определенная точка. Очевидно, ближайшие к нему представимые числа Х-бл и Х+бл отличаются на единицу младшего бита мантиссы(рис. 1.15):

Примечание. Для просто-

ты предполагается, что мантисса числаХнеравна

100…00 или 11…11, т.к.

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

30