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

Важное следствие (пример 2).

Но что увидит пользователь, если мы чуть изменим программу?

var

a : integer;

begin

clrscr;

a := 12198;

write(shortint(a));

readkey;

end.

Очевидно, что число 12198 не укладывается в диапазон типа shortint. Для того, что бы ответить на вопрос, необходимо получить внутренне представление числа 12198. Возьмем его из предыдущего примера - 2FA616.

Если машина старшеконечная, то в памяти эти 2 байта будут располагаться в обратном порядке, т.е. A62F16.

При преобразовании в однобайтовый тип (shortint) будет взят только первый байт, т.е. A616.

Переведем это число в двоичную систему. A616=1010 01102.

Очевидно, что shortint – знаковый тип, и старший бит равен 1. Поэтому это число отрицательное.

Для того, что бы получить модуль этого числа, необходимо в начале вычесть единицу (естественно знаковый бит отбрасывается при получении модуля). 010 01102-12=010 01012

Теперь необходимо инвертировать все биты.

Получим

010 01012

101 10102

Теперь переведем 101 10102 в десятичную систему. Получим 90.

Ответ: -90.

Представление вещественных типов в памяти эвм

Для начала вспомним, что такое нормальная форма десятичного числа.

Нормальная форма в общем виде выражается следующим образом:

R=m×pn, где m – мантисса, p – основание системы счисления, n – порядок.

Приведем пару примеров нормировки чисел

число

нормированное число

456

4,56*102

0,02

2*10-2

123,02

1,2302*102

100

1*102

1

1*100

Для объяснения внутреннего представления чисел приведем аналогичные рассуждения, наложив ограничения:

Ограничение 1: первая значащая цифра в нормированном числе всегда «1».

Пример 1

Путь у нас есть нормированное число: 1,56*10-2, которое надо представить в 16 ячейках, одна из которых отведена под знак, 10 ячеек отведены под мантиссу, 5 ячеек отведены под порядок.

В общем виде результат представления равен

X

X

X

X

X

X

X

X

X

X

X

X

X

X

X

X

Синим цветом выделены разряды для мантиссы, зеленым цветом выделены разряды для порядка.

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

0

X

X

X

X

X

X

X

X

X

X

X

X

X

X

X

Теперь нам надо записать мантиссу в 10 разрядов. Поэтому дополним число 1,56 незначащими нулями до 10 разрядов: 1,560000000.

Так как у нас есть ограничение 1, то мы можем «отбросить» первую единицу, потому что она у нас всегда там есть (замечание: единственное исключение – число 0. Оно в памяти ЭВМ представляется исключительно). Т.к. мы отбросили «1» в начале, то допишем еще один незначащий ноль в конце и запишем в соответствующие разряды.

0

X

X

X

X

X

5

6

0

0

0

0

0

0

0

0

Теперь нам надо записать порядок в 5 разрядов. Но проблема заключается в том, что он равен P = -2, т.е. знаковому числу. Поэтому принято смещать порядок относительно 0, т.е. записывают не P, а P + 10000 (09999 взято для примера. Необходимо 5 цифр, потому что отведено 4 разряда, и первый незначащий 0). Поэтому в разряды порядка попадет число (-2 + 09999 = 09997)

0

0

9

9

9

7

5

6

0

0

0

0

0

0

0

0

Мы получили число, которое храниться по принципам, аналогичным принципам хранения чисел с плавающей запятой.