Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Битовая логика.docx
Скачиваний:
2
Добавлен:
11.07.2019
Размер:
122.24 Кб
Скачать

Пример 4

Найти представление числа 139,76 в форме с плавающей запятой, если это 4х байтовое число и под порядок отводится 9 бит

Это тип Single. Т.к. он занимает 4 байта, то это 32 бита. Поэтому в общем виде ответ будет выглядеть:

Так как число положительное, то в первом бите будет 0. Поэтому следующий шаг к ответу будет

0

Переведем число 139,76 в двоичную систему.

139,7610 = 10001011,11000010100011112

Пронормируем полученное число

10001011,11000010100011112=1,000101111000010100011112*27

Порядок равен 710=1112. Под него отведено 9 бит, то смещение будет равно 011111111. Поэтому в порядок запишется (0111111112+1112=100000010). Поэтому следующий шаг к ответу будет

0

1

0

0

0

0

0

0

1

0

Мантисса у нашего числа получилась 1.000101111000010100011112. Откинем первую единицу, получим .000101111000010100011112. Однако эти число получилось больше, чем 22 разряда. Поэтому необходимо откинуть последнюю единицу (из-за этого появляется погрешность при представлении числа в памяти ЭВМ). Поэтому ответ будет

0

1

0

0

0

0

0

0

1

0

0

0

0

1

0

1

1

1

1

0

0

0

0

1

0

1

0

0

0

1

1

1

Для удобства запишем в 16ричной системе: 4085E14716.

Если машина старшеконечная, то в памяти ЭВМ это число будет располагаться 47E1854016

Представление числа «0» в памяти ЭВМ.

Число 0 – исключение из правил, потому что у него нет значащей единицы. Поэтому его представление в памяти ЭВМ – все 0. Т.е. в 16ричной системе для 4х байтового числа с плавающей запятой это будет 0000000016.

Общий алгоритм сложения (или вычитания) чисел с плавающей точкой

Алгоритм сложения (или вычитания) чисел с плавающей точкой следующий:

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

  2. Сложить (или вычисть) мантиссы.

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

Пример 1

Сложить 2 числа с плавающей точкой. Числа равны 3.25 и 0.375. Для каждого числа отводится 4 байта, 9 бит отводится под порядок.

Решение:

Из предыдущих примеров возьмем представление этих числе в памяти ЭВМ.

3.25

0

1

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0.375

0

0

1

1

1

1

1

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Как видим, эти 2 числа имею различный порядок. Для того, что бы их можно было складывать, необходимо приравнять порядки. При этом надо сдвигать число с меньшим порядком вправо. Очевидно, что разность между порядками равна 3, т.е. нам надо сдвигать на 3 разряда вправо второе число. При этом надо при первом сдвиге надо не забыть о «отброшенной» первой знаковой единице.

Сдвинем число последовательно по 1 разряду 3 раза. Получим

0

0

1

1

1

1

1

1

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Таким образом, мы получили

3.25 (с «отброшенной единицей»)

0

1

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0.375 (без «отброшенной единицы»)

0

1

0

0

0

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Теперь можно сложить мантиссы. Получим

0

1

0

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Важно отметить, что у нас не было переполнения мантиссы, т.е. не надо нормировать результат сложения мантисс. Для удобства запишем число в 16ричной системе: 4014000016.

Важное следствие:

Если порядки сильно отличаются, то второе число может быть просто «отброшено».

Пример 2

Вычисть из 3.75 число 3.25, если это числа с плавающей точкой. Для каждого числа отводится 4 байта, 9 бит отводится под порядок.

Решение:

Из предыдущих примеров возьмем представление этих числе в памяти ЭВМ.

0.375

0

1

0

0

0

0

0

0

0

0

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

3.25

0

1

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Как видим, эти 2 числа имеют одинаковый порядок. Поэтому ни одно из них не надо сдвигать. Поэтому можно сразу вычитать мантиссы. Но при этом нельзя забывать об «отброшенной» единице. Поэтому для удобства запишем мантиссы с «отброшенной» единицей.

0

1

0

0

0

0

0

0

0

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

1

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

И произведем вычитание. Получим

0

1

0

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Как видим, в мантиссе первая цифра – не «1». Поэтому необходимо полученное число сдвигать влево до тех пор, пока в первом бите не будет 1. (общеизвестно, что сдвиг влево в двоичной системе – это умножение на 2. Поэтому при сдвиге влево порядок будет уменьшаться. А при сдвиге вправо – порядок будет увеличиваться). Очевидно, что надо сдвинуть на 2 разряда влево, что бы единица стала первой значащей цифрой.

0

1

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Теперь можно откинуть первую значащую единицу

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

И записать порядок, предварительно уменьшив его на 2, т.е. на 102. 1000000002-102=0111111012.

Очевидно, что при вычитании знак числа не поменялся, поэтому в старшем бите будет 0.

0

0

1

1

1

1

1

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Для удобства запишем в 16ричной системе:3F40000016