Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тех прог.doc
Скачиваний:
37
Добавлен:
14.11.2019
Размер:
3.59 Mб
Скачать

13.6.Дробные числа в двоичной системе

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

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

Заметим, что при умножении числа на 2 точка, отделяющая целую и дробную части, переместится вправо и старший разряд дробной части превратится в младший разряд целой части. Используя это наблюдение, приходим к следующему алгоритму получения двоичного представления числа, меньшего 1. Нужно умножать число, меньшее 1 на 2. Очередная двоичная цифра дробной части равна цифре целой части после очередного умножения числа на 2. Найдем, например, двоичное представление для числа 5/8 = 0.625, табл.54.

Таблица 55. Двоичные цифры числа 5/8

Число

Число *2

Двоичная цифра

0.625

1.25

1

0.25

0.5

0

0.5

1.0

1

0.0

В данном примере число представляется в виде двоичной дроби с конечным числом цифр, процесс преобразования прекращается, когда число обращается в 0.

Рассмотрим теперь число 0.3, табл.56

Таблица 57. Двоичные цифры числа 0.3

Число

Число*2

Двоичная цифра

0.3

0.6

0

0.6

1.2

1

0.2

0.4

0

0.4

0.8

0

0.8

1.6

1

0.6

1.2

1

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

13.7. Внутреннее представление плавающих типов

Числа с плавающей точкой хранятся в памяти в экспоненциальной форме в двоичной системе счисления. Формула такого представления имеет вид

.

Здесь 1.  – мантисса числа в двоичной системе,  – порядок числа в двоичной системе.

Чтобы получить двоичные цифры мантиссы, нужно представить число в виде суммы степеней двойки. Например,

Итак, для числа 5.3 мантисса имеет вид:

= 01010011001100110011001100...2,

порядок равен:

= 102.

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

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

Рассмотрим для примера тип float, под который отводится 4 байта памяти с подряд идущими адресами. Из 32 бит, выделяемых для размещения float, старший 31-й разряд используется для хранения знака числа (0 – положительное число, 1 – отрицательное), в 8 разрядах (с 23-го по 30-й) хранится порядок и в 23-х разрядах (с 0-го по 22-й) размещается мантисса. Порядок хранится в увеличенном на шестнадцатеричное число 7F виде, то есть используется двоичная нотация с избытком 127. Это позволяет обойтись без специального разряда для хранения знака порядка.

Пусть для размещения числа типа float выделены байты с адресами

a, a+1, a+2, a+3.

Возможны различные способы размещения в этих байтах разрядов двоичного представления числа. В процессорах фирмы Intel принят способ

1234,

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

Таблица 59. Двоичный код для чисел с типа float

Число

Двоичный код

16 – ричный код

порядок

Мантисса

1.0

0

011 1111 1

000 0000 0000 0000 0000 0000

3f 80 00 00

2.0

0

100 0000 0

000 0000 0000 0000 0000 0000

40 00 00 00

10.0

0

100 0001 0

010 0000 0000 0000 0000 0000

41 20 00 00

5.30

0

100 0000 1

010 1001 1001 1001 1001 1010

40 A9 99 9A