Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Лекция 7

1. Внутреннее машинное представление целых

и вещественных чисел

Для представления информации в памяти ЭВМ (как числовой, так и не числовой) используется двоичный способ кодирования.

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

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

Множество целых чисел, представимых в памяти ЭВМ ограничено и зависит от размера ячеек памяти (машинного слова), используемых для их хранения. В k-разрядной ячейке может храниться 2k (655636) различных значений целых чисел.

Вообще, разряды нумеруются справа налево, начиная с 0. Ниже показана нумерация бит в двухбайтовом машинном слове.

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

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

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

Пример 1

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

Решение:

1) 12910=100000012

2) 1000 0001

Пример 2

Данное внутреннее машинное представление числа в однобайтовом машинном слове – 9С. Определить, что это за число.

Решение:

НЕ нашли? Не то? Что вы ищете?

1) 9С16 =1001 11002

2) 27+24+23+22=128+16+8+4=15610

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

Представление целых положительных чисел

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

1. Перевести число N в двоичную систему счисления.

2. Полученный результат дополнить слева незначащими нулями до k разрядов.

3. При необходимости перевести число в сжатую шестнадцатеричную форму.

Пример 3

Получить внутреннее представление целого числа 1607 в 2-х байтовой ячейке. Записать ответ в 16-ричной форме.

Решение:

1) 160710 =110010001112

2) Внутреннее представление этого числа: 0000 0110 0100 0111

3) 16-ричная форма: 0647.

Представление целых отрицательных чисел

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

Алгоритм получения внутреннего представления целого отрицательного числа N, хранящегося в k-разрядном машинном слове:

1. Получить внутреннее представление положительного числа N.

2. Получить обратный код этого числа заменой 0 на 1 и 1 на 0, т. е значения всех бит инвертировать.

3. К полученному числу прибавить 1 (получить дополнительный код).

4. При необходимости записать сжатое внутренне машинное представление.

Пример 4

Получить внутреннее представление целого числа -1607 в 2-х байтовой ячейке. Записать ответ в 16-ричной форме.

Решение:

1) Внутреннее представление этого положительного числа: 0000 0110 0100 0111

2) Обратный код – 1111 1001 1011 1000

3) Дополнительный код - 1111 1001 1011 1001

4) Сжатый 16-ричный код – F9B9

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

Пример 5

Дано сжатое 16-ричное внутреннее представление числа – CF18. Определить, что это за число.

Решение:

1)  CF18 = 1100 1111 0001 1000

2)  Число отрицательное, так как старший разряд равен 1, поэтому получаем обратный код – 1100 1111 0001 0111 (вычесть 1)

3)  Прямой код – 0011 0000 1110 1000

4)  30E816= 1252010

Стандарт IEEE 754

Для представления действительных чисел в памяти компьютера был разработан стандарт IEEE 745. Он используется многими микропроцессорами и программными средствами. Рассмотрим основные понятия этого стандарта

Нормализованная и денормализованная форма вещественных чисел

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

Любое число А может быть представлено в экспоненциальной форме:

А = m • qn, где m – мантисса числа, q – основание системы счисления., n – порядок числа. Например: 555,55=0,55555•103

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

В денормализованной форме мантисса должна отвечать следующему условию: она должна быть правильной дробью и иметь после запятой цифру, отличную от нуля, то есть 1/n ≤ |m| < 1

Например, 555,55 – естественная форма, 0,55555•103 - денормализованная форма. Это касается и отрицательных чисел, т. к. мантисса в условии взята по модулю.

Пример 6

Записать числа в денормализованной форме (в десятичном виде):

а) 217, 93410 б) 7532110 в) 10,010110 г) 20045010

Нормализованная мантисса содержит свой старший бит слева от точки. В общем случае мантисса должна удовлетворять условию 1<=|m|<10. Так как числа представлены в двоичном виде, то этот бит всегда равен 1. Иными словами нормализованная мантисса принадлежит интервалу 1 <= |m| < 2. В памяти машины этот бит не хранится, т. е. является "скрытым”.

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

Пример 7

Представить число 155,625 в двоичной системе счисления в экспоненциальном нормализованном виде.

155,62510 = 10011011,1012 - число двоичной системе

Приведем полученное число к нормализованному виду в десятичной и двоичной системе:

1,55625∙102 = 1,0011011101∙2111

В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа:

Мантиссу m=1,0011011101

Экспоненту exp2= +111

Вычисление машинного порядка

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

- знак числа (старший бит),

- машинный порядок числа

- мантисса.

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

Связь между машинным порядком (Мр) и математическим (р) в рассматриваемом случае выражается формулой: Мр = (2n-1-1) + p, где n – это количество бит, отводимых на порядок.

Пример 8

Записать машинный порядок для числа 34,48, если известно, что под него отводится 11 бит.

1) Двоичное представление числа – 100010, 011112

2) Нормализованная форма числа - 1,0001001111*2101

3) Mp=210-1+5=102810= 100000001002

Формальное представление вещественных чисел в стандарте IEEE 754

Пример 9

Записать внутреннее машинное представление числа 155,625 для 32-битного формата (на порядок отводится 8 бит).

Решение:

1) 155,62510 = 10011011,1012 - число двоичной системе

2) 1,55625∙102 = 1,0011011101∙2111 – нормализованный вид числа

3) 27-1+7=128-1+7=13410=100001102 - машинный порядок

4) 01000011 00011011 10100000 00000000 – результат

Для 64-битного представления чисел (double) на порядок отводится 11 бит, для 16-битного (real) и 32-битного (single) – 8 бит, для 80-битного. (extended) – 15 бит.

Преобразование машинного представления чисел в вещественное число

Пример 10

Восстановить число по внутреннему машинному представлению:

01000011 00011011 10100000 00000000

Так как представление 32-битное, то, значит, под машинный порядок отводится 8 бит. Переведем значение машинного порядка в десятичную систему

100001102=128+4+2=13410

Подставим в формулу

134 = (27-1) + p, 134=127+p, p=7

Перенесем запятую в мантиссе на 7 разрядов (помним, что целая часть равна 1):

10011011,1012=27+24+23+21+20+2-1+2-3 =128+16+8+2+1+1/2+1/8=155+0,5+0,125= 155,625

Представление числа 0 и

Приведенная выше формула не применяется в следующих случаях (примеры даны для 32-разрядного представления):

1. число 00 00 00 00 считается числом +0

число 80 00 00 00 считается числом -0

Два нуля используются для симметричности.

2. число 7F 80 00 00 считается числом +∞

число FF 80 00 00 считается числом -∞

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

Операции с целыми числами. Переполнение

Благодаря тому, что отрицательные числа кодируются в дополнительном коде, при сложении можно не обращать внимания на знаки слагаемых, то есть со знаковым разрядом обращаются точно так же, как со всеми остальными. Например, сложим числа 5 и -9, используя 8-разрядную двоичную арифметику.

0000 0101

1111 0111

--------------

1111 1100

Переведем полученное число в десятичную систему: 1111 1100 -> 1111 1011-> 0000 0100, то есть -4.

При сложении двух числе с одинаковыми знаками может случиться переполнение, то есть сумма будет содержать слишком большое количество разрядов. Например, сложим числа 96 и 33. Их сумма 129 выходит за восьмибитную сетку. Чтобы обнаружить переполнение, добавим к обоим слагаемым еще один старший бит, совпадающий со знаковым:

0 0 1 1 0 0 0 0 0

0 0 0 1 0 0 0 0 1

------------------------

0  1 0 0 0 0 0 0 1

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

То же самое получается, если сложить два достаточно больших отрицательных числа. Например, -96 и -33.

1 1 0 1 0 0 0 0 0

1 1 1 0 1 1 1 1 1

------------------------

1 0 1 1 1 1 1 1 1

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

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

Например

00000111->00001110 (7->14)

При сдвиге вправо число будет делиться на 2 нацело.

Например

00010001 ->00001000 (17->8)

При сдвиге вправо отрицательных чисел старший разряд необходимо заполнить 1, а не 0.