Форматы представления целых чисел

Числа в ЭВМ хранятся в соответствии с форматом. Формат – это соглашение или правила представления числа в виде последовательности бит.

Минимальная единица хранения данных в ЭВМ – 1 байт. Существуют следующие форматы представления целых чисел: байт (полуслово), слово (включает 2 байта), двойное слово (4 байта), расширенное слово (8 байт). Биты, из которых состоят эти форматы, называются разрядами. Таким образом, в байте 8 разрядов, в слове – 16 разрядов, а в двойном слове – 32 разряда. Слева находятся старшие разряды, а справа – младшие. Каждый из этих форматов может быть знаковым (рис. 5.1) для представления положительных и отрицательных чисел или беззнаковым (рис. 5.2) для представления положительных чисел.

Форматы представления целых чисел - student2.ru

Рис. 5.1. Знаковые форматы представления целых чисел

Знаковым является самый старший разряд. На рис. 5.1 знаковый разряд обозначен символом S. Если он равен 0, то число считается положительным, а если разряд равен 1, то число считается отрицательным.

Форматы представления целых чисел - student2.ru

Рис. 5.2. Беззнаковые форматы представления целых чисел

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

–2n–1 £ X £ 2n–1 – 1,

а для беззнакового формата определяется по формуле

0 £ X £ 2n – 1,

где n – число разрядов в формате.

Таблица 5.1. Форматы представления целых чисел в ЭВМ

Формат Число разрядов Диапазон (границы)
Знаковый Беззнаковый
Байт –128; 127 0; 255
Слово –32 768; 32767 0; 65 535
Двойное слово –2 147 483 648; 2 147 483 647 0; 4 294 967 295

5.1.2. Прямой и дополнительный коды
представления двоичных чисел

В прямом коде старший бит кодирует знак числа (0 – для положительного, 1 – для отрицательного), а остальные биты – модуль числа.

Пример 5.1. Число 11 в прямом коде будет представляться как 0|1011п, а число –11 – как 1|1011п. □

В дополнительном коде положительное число кодируется также как и в прямом. Чтобы представить отрицательное число в дополнительном коде, существуют два способа. При представлении чисел в дополнительном коде используется операция инвертирования – замена бита на противоположный, то есть 0 на 1, а 1 на 0.

Правило 5.1. (поразрядное представление отрицательного числа в дополнительном коде) Представить модуль отрицательного числа в прямом коде и проинвертировать все разряды левее самой младшей (правой) единицы.

Пример 5.2. Представить число –11 в дополнительном коде путем инвертации разрядов.

Решение. Переведем модуль этого числа в двоичную систему: 11 = 10112 и представим его в прямом коде: 0|1011п. Самая младшая единица – последняя, поэтому ее оставляем без изменения, а остальные разряды слева инвертируем (рис. 5.3).

В результате получаем 1|0101д – представление числа –11 в дополнительном коде. □

Форматы представления целых чисел - student2.ru

Рис. 5.3. Представление числа –11 в дополнительном коде

Правило 5.2. (арифметическое представление отрицательного числа в дополнительном коде) Прибавить к отрицательному числу 2m, где m – количество разрядов в двоичном представлении или данном формате, и полученное число перевести в двоичную систему счисления. Для байта 28 = 256, для слова 216 = 65 536, для двойного слова 232 = 4 294 967 296.

Из этих правил можно сделать вывод, что положительные числа в случае увеличения числа разрядов дополняются слева нулями, а отрицательные – единицами.

Пример 5.3. Представить число –11 в дополнительном коде путем арифметических операций.

Решение. Пусть необходимо получить m = 5 разрядов дополнительного кода. Вычислим слагаемое 2m = 25 = 32. Произведем сложение и перевод в двоичную систему счисления:

–11 + 32 = 21 = 101012.

Полученный результат соответствует представлению числа –11 в дополнительном коде.

Для m = 8, 28 = 256:

–11 + 256 = 245 = 111101012.

Представление числа –11 было дополнено единицами слева до 8 разрядов. □

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

Правило 5.3. (поразрядное определение значения отрицательного числа, записанного в дополнительном коде) Алгоритм определения значения отрицательного числа в дополнительном коде состоит из следующих шагов.

1. Проинвертировать все разряды левее самой младшей (правой) единицы.

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

3. Умножить результат на –1.

Пример 5.4. Определить, какое десятичное число закодировано числом 1|0101д с помощью поразрядного определения.

Решение. Проинвертируем разряды числа:

1010|1д ® 0101|1п.

Переведем число из двоичной системы счисления в десятичную систему счисления:

010112 = 11.

Умножим результат на –1 и получим число –11. □

Правило 5.4. (арифметическое определение отрицательного числа, записанного в дополнительном коде) Перевести двоичное число в десятичную систему счисления и вычесть из полученного числа число 2m, где m – количество разрядов в двоичном представлении.

Пример 5.5. Определить, какое десятичное число закодировано числом 1|0101д с помощью арифметического определения.

Решение. Переведем число из двоичной системы счисления в десятичную систему счисления:

101012 = 21.

Вычтем из полученного результата перевода число 2m = 25 = 32, так как двоичное число состоит из 5 разрядов:

21 – 32 = –11.

В результате получим десятичное число –11. □

Числа в знаковых форматах записываются в дополнительном коде, а в беззнаковых – в прямом.

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

Пример 5.6. Сложить 21 и –11 в двоичной системе счисления.

Решение. Переведем слагаемые в дополнительный код:

21 = 0|10101д; –11 = 1|10101д.

Будем использовать правила двоичной арифметики:

0 + 0 = 0;

1 + 0 = 0 +1 = 1;

1 + 1 = 10 (с переносом единицы в следующий разряд).

Сложим два двоичных числа столбиком с учетом того, что перенос единицы из знакового разряда игнорируется:

0101012

1101012

0010102 = 10.

В результате получено число 10 – сумма 21 и –11 без дополнительных преобразований. □

Форматы целых чисел слово и двойное слово располагаются в памяти ЭВМ в обратном порядке, то есть сначала младший байт, а затем старший. Например, слово B5DE16 будет располагаться в памяти, как показано на рис. 5.4.

Форматы представления целых чисел - student2.ru

Рис. 5.4. Расположение слова B5DE16 в памяти ЭВМ

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

5.2. Представление вещественных чисел
в памяти ЭВМ

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

±M × n±P,

где M – мантисса (значащая часть числа); n – основание системы счисления; P – порядок числа.

Пример 5.7. Число 2,5 × 1018 имеет мантиссу равную 2,5, а порядок равный 18. □

Мантисса называется нормализованной, если ее абсолютное значение лежит в диапазоне:

1/n £ |M| < 1,

где n – основание системы счисления.

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

Число с нормализованной мантиссой называется нормализованным.

Пример 5.8. Представить числа –245,62 и 0,00123 в форме числа с плавающей точкой.

Решение. Число –245,62 можно представить в форме числа с порядком –245,62 × 100. Мантисса этого числа не нормализована, поэтому поделим его на 103, увеличив при этом порядок:

–0,24562 × 103.

В результате число –0,24562 × 103 нормализовано.

Число 0,00123 в форме числа с порядком 0,00123 × 100 не нормализовано, так как не нормализована мантисса. Умножим мантиссу на 102, уменьшив при этом порядок:

0,123 × 10–2.

В результате число 0,123 × 10–2 нормализовано. □

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

Для основанного на стандарте IEEE-754 представления вещественного числа в ЭВМ используются m + p + 1 бит, распределяемые следующим образом (рис. 5.5): 1 разряд знака мантиссы; p разрядов порядка; m разрядов мантиссы.

Форматы представления целых чисел - student2.ru

Рис. 5.5. Структура общего формата числа с плавающей точкой

Это представление называется (m, p)-форматом.

Диапазон представления чисел X (m, p)-форматом определяется из неравенства:

Форматы представления целых чисел - student2.ru £ X £ (1 – 2 m –1) Форматы представления целых чисел - student2.ru » Форматы представления целых чисел - student2.ru .

При этом порядок числа P должен удовлетворять условию
–2p – 1 + 1 £ P £ 2p – 1 – 1

Для вещественных чисел в стандарте IEEE-754 используются (23,8)- и (52,11)-форматы, называемые одинарным и двойным вещественными форматами соответственно (табл. 5.2).

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

Правило 5.5. (перевод десятичных чисел в (m, p)-формат) Алгоритм перевода десятичного числа X в (m, p)-формат состоит из следующих шагов.

1. Если Х = 0, то принять знаковый разряд, порядок и мантиссу за ноль и закончить алгоритм.

2. Если X > 0, то принять знаковый разряд 0, иначе принять 1. Знаковый разряд сформирован.

3. Перевести целую и дробную часть абсолютного значения числа X в двоичную систему счисления. Если число дробное, то получить m + 1 разрядов. Принять порядок равный нулю.

Таблица 5.2. Сравнительные характеристики
вещественных форматов

Характеристики Одинарный Двойной
Названия в языке Турбо-Паскаль single double
Размер, байт/бит 4/32 8/64
Порядок p, бит
Мантисса m, бит
Смещение порядка 2p – 1 – 1
Количество значащих десятичных цифр мантиссы 7 .. 8 15 .. 16
Диапазон десятичных порядков –45 .. 38 –324 .. 308

4. Если X ³ 1, то перенести запятую влево до самого старшего разряда и увеличить порядок, иначе перенести запятую вправо до первого ненулевого (единичного) разряда и уменьшить порядок.

5. Если число разрядов дробной части меньше m, то дополнить дробную часть нулями справа до m разрядов. Отбросить единицу из целой части. Мантисса сформирована.

6. Прибавить к порядку смещение 2p – 1 – 1 и перевести порядок в двоичную систему счисления. Порядок сформирован. Код, в котором представлен порядок, называется смещенным. Смещенный порядок упрощает сравнение, сложение и вычитание порядков при арифметических операциях.

7. Записать знаковый разряд, порядок и мантиссу в соответствующие разряды формата.

Пример 5.9. Представить число –25,6875 в одинарном вещественном формате.

Решение. В примере 4.7 был произведен перевод абсолютного значения числа –25,6875 в двоичную систему и было получено 9 разрядов:

25,6875 = 11001,10112.

Нормализуем число, сдвинув запятую влево и повысив порядок:

1,100110112 × 24.

После отбрасывания целой части остается 23 разряда дробной части (в соответствии с форматом (23,8)), записываемые как мантисса:

10011011000000000000000.

Порядок равен 4 (степень двойки после сдвига запятой влево). Произведем его смещение и перевод в двоичную систему счисления:

4 + 127 = 131 = 100000112.

Число –25,6875 отрицательное, следовательно, знаковый разряд равен 1.

Все готово для представления числа –25,6875 в одинарном вещественном формате по схеме знаковый разряд + порядок + мантисса:

1 10000011 10011011000000000000000.

Разделим это число по 8 разрядов, сформируем байты и запишем их шестнадцатеричными числами:

C1 CD

Таким образом, число –25,6875 можно записать как C1CD8000. □

Как и форматы целых чисел, форматы вещественных чисел хранятся в памяти ЭВМ в обратном порядке следования байт (сначала младшие, потом старшие).

Арифметические операции над числами с плавающей точкой осуществляются в следующем порядке.

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

При умножении чисел их мантиссы перемножаются, а порядки складываются.

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

Наши рекомендации