Как представляются действительные числа в памяти эвм
Перейти к содержимому

Как представляются действительные числа в памяти эвм

  • автор:

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

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

Элементарная ячейка памяти ЭВМ имеет длину 8 бит (1 байт). Каждый байт имеет свой номер (его называют адресом). Наибольшую последовательность бит, которую ЭВМ может обрабатывать как единое целое, называют машинным словом. Длина машинного слова зависит от разрядности процессора и может быть равной 16, 32 битам и т.д.

Для кодирования символов достаточно одного байта. При этом можно представить 256 символов (с десятичными кодами от 0 до 255). Набор символов персональных компьютеров чаще всего является расширением кода ASCII (American Standart Code of Information Interchange — стандартный американский код для обмена информацией).

В некоторых случаях при представлении в памяти ЭВМ чисел используется смешанная двоично-десятичная система счисления, где для хранения каждого десятичного знак нужен полубайт (4 бита) и десятичные цифры от 0 до 9 представляются соответствующими двоичными числами от 0000 до 1001. Например, упакованный десятичный формат, предназначенный для хранения целых чисел с 18-ю значащими цифрами и занимающий в памяти 10 байт (старший из которых знаковый), использует именно этот вариант.

Другой способ представления целых чисел — дополнительный код . Диапазон значений величин зависит от количества бит памяти отведенных для их хранения. Например, величины типа Integer лежат в диапазоне от
-32768 (-2 15 ) до 32677 (2 15 -1) и для их хранения отводится 2 байта: типа LongInt — в диапазоне от -2 31 до 2 31 -1 и размещаются в 4 байтах: типа Word — в диапазоне от 0 до 65535 (2 16 -1) используется 2 байта и т.д.

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

Вообще, разряды нумеруются справа налево, начиная с нуля.

Дополнительный код положительного числа совпадает с его прямым кодом . Прямой код целого числа может быть представлен следующим образом: число переводиться в двоичную систему счисления, а затем его двоичную запись слева дополняют таким количеством незначащих нулей, сколько требует тип данных, к которому принадлежит число. Например, если число 37(10) = 100101(2) объявлено величиной типа Integer, то его прямым кодом будет 0000000000100101, а если величиной типа LongInt, то его прямой код будет 00000000000000000000000000100101. Для более компактной записи чаще используют шестнадцатеричный код. Полученные коды можно переписать соответственно как 0025(16) и 00000025(16).

  1. записать прямой код модуля числа;
  2. инвертировать его (заменить единицы нулями, нули — единицами);
  3. прибавить к инверсионному коду единицу.
  1. прямой код числа 37 есть 000000000000000000000000000100101
  2. инверсный код 11111111111111111111111111011010
  3. дополнительный код 11111111111111111111111111011011 или FFFFFFDB(16)
  1. вычесть из кода 1;
  2. инвертировать код;
  3. перевести в десятичную систему счисления. Полученное число записать со знаком минус.

Примеры. Запишем числа, соответствующие дополнительным кодам:

Поскольку в старшем разряде записан нуль, то результат будет положительным. Это код числа 23.

Здесь записан код отрицательного числа, исполняем алгоритм:

  1. 1111111111000000(2) — 1(2) = 1111111110111111(2);
  2. 0000000001000000;
  3. 1000000(2) = 64(10)

Несколько иной способ применяется для представления в памяти персонального компьютера действительных чисел. Рассмотрим представление величин с плавающей точкой .

Персональный компьютер IBM PC с математическим сопроцессором 8087 позволяет работать со следующими действительными типами (диапазон значений указан по абсолютной величине):

Тип Диапазон Мантисса Байты
Real 2,9*10 -39 ..1,7*10 38 11-12 6
Single 1,5*10 -45 ..3,4*10 38 7-8 4
Double 5,0*10 -324 ..1,7*10 308 15-16 8
Extended 3,4*10 -4932 ..1,1*10 4932 19-20 10

Покажем преобразование действительного числа для представления его в памяти ЭВМ на примере величины типа Double.

Как видно из таблицы, величина этого типа занимает в памяти 8 байт. На рисунке показано, как здесь представлены поля мантиссы и порядка:

S Смещенный порядок Мантисса

Можно заметить, что старший бит, отведенный под мантиссу, имеет номер 51, т.е. мантисса занимает младшие 52 бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна единице, здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка храниться здесь не как целое число, представленное в дополнительном коде. Для упрощения вычислений и сравнения действительных чисел значение порядка в ЭВМ хранится в виде смещенного числа , т.е. к настоящему значению порядка, перед записью его в память, прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает 11 бит и имеет диапазон от 2 -1023 до 2 1023 , поэтому смещение равно 1023(10) = 1111111111(2). Наконец, бит с номером 63 указывает на знак числа.

  1. перевести модуль данного числа в двоичную систему счисления;
  2. нормализовать двоичное число, т.е. записать в виде М*2 p , где М — мантисса (ее целая часть равна 1(2)) и р — порядок, записанный в десятичной системе счисления;
  3. прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления;
  4. учитывая знак заданного числа (0 — положительное; 1 — отрицательное), выписать его представление в памяти ЭВМ.
  1. Двоичная запись модуля этого числа имеет вид 100111000,0101.
  2. Имеем 100111000,0101 = 1,001110000101*2 8 .
  3. Получаем смещенный порядок 8 + 1023 = 1031. Далее имеем 1031(10) = 10000000111(2).
  4. Окончательно

1 10000000111 0011100001010000000000000000000000000000000000000000

Очевидно, что более компактнополученный код стоит записать следующим образом: C073850000000000(16).

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

Пусть дан код 3FEC600000000000(16) или

0 01111111110 1100011000000000000000000000000000000000000000000000
  1. Прежде всего, замечаем, что это код положительного числа, поскольку в разряде с номером 63 записан нуль, Получим порядок этого числа. 01111111110(2) = 1022(10). 1022 — 1023 = -1.
  2. Число имеет вид 1,1100011*2 -1 или 0,11100011.
  3. Переводом в десятичную систему счисления получаем 0,88671875.

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

Если же вам нужны варианты на бумаге то жмите здесь.

Как представляются действительные числа в памяти эвм

Существуют два способа представления чисел в памяти ЭВМ. Они называются так: форма с фиксированной точкой и форма с плавающей точкой. Форма с фиксированной точкой применяется к целым числам, форма с плавающей точкой — к вещественным числам (целым и дробным). Под точкой здесь подразумевается знак-разделитель целой и дробной части числа.

Целые отрицательные числа.

Разберемся, как представляются отрицательные числа. Казалось бы, для этого достаточно заменить 0 на 1 в старшем (31-м) разряде ячейки памяти. Однако реально это делается несколько сложнее. Для представления отрицательных целых чисел используется дополнительный код.

Дополнительным кодом двоичного числа X в N-разрядной ячейке является число, дополняющее его до значения 2.

    Получить дополнительный код можно следующим путем:
  1. записать внутреннее представление положительного числа X;
  2. записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;
  3. к полученному числу прибавить 1.
00000000 00000000 00010101 1111110
11111111 11111111 11101010 00000011
11111111 11111111 11101010 00000100

Шестнадцатеричная форма результата:

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

Почему отрицательные числа представляются в дополнительном коде? Дело в том, что в этом случае операция вычитания двух чисел сводится к сложению с дополнительным кодом вычитаемого, и процессору достаточно уметь лишь складывать числа. В самом деле:

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

Проверим, действительно ли в ячейке памяти получится О в результате сложения числа 5628 с числом -5628 в форме дополнительного кода.

00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 =

1 00000000 00000000 00000000 00000000

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

Двоичное 32-разрядное число 231 является «отрицательным самому себе». Получим его дополнительный код:

    Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
10000000 00000000 00000000 00000000
01111111 11111111 11111111 11111111
10000000 00000000 00000000 00000000

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

Следовательно, диапазон представления целых чисел в 32-разрядном машинном слове:

В общем случае для N-разрядного машинного слова этот диапазон такой:

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

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

Вещественные числа. Числовые величины, которые могут принимать любые значения (целые и дробные) называются вещественными числами. В математике также используется термин «действительные числа». Решение большинства математических задач сводится к вычислениям с веществен-ными числами. Как же такие числа представляются в памяти компьютера?

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

Форма с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления р в некоторой целой степени n, которую называют порядком:

Например, число 25,324 можно записать в таком виде: 0.25324х102. Здесь m=0.25324 — мантисса, n=2 — порядок. Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться десятичная точка в мантиссе. Отсюда название «плавающая точка».

Однако справедливы и следующие равенства:

25,324 = 2,5324*101 = 0,0025324*104 = 2532,4*102 и т.п.

Получается, что представление числа в форме с плавающей точкой неоднозначно? Чтобы не было неоднозначности, в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в нормализован-ном представлении должна удовлетворять условию:

Иначе говоря, мантисса меньше единицы и первая значащая цифра — не ноль. Значит для рассмотренного числа нормализованным представлением будет: 0.25324 * 102. В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных. Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (р=2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:

± машинный порядок

&nbsp &nbsp &nbsp &nbsp М А

Н Т И С

С А&nbsp &nbsp &nbsp

&nbsp&nbsp&nbsp&nbsp&nbsp1-й байт &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 2-й байт&nbsp&nbsp&nbsp 3-й байт &nbsp 4-й байт&nbsp&nbsp

В старшем бите 1-го байта хранится знак числа. В этом разряде 0 обозначает плюс, 1 — минус. Оставшиеся 7 бит первого байта содержат машинный порядок. В следующих трех байтах хранятся значащие цифры мантиссы.

Что такое машинный порядок? В семи двоичных разрядах помещаются двоичные числа в диапазоне от 0000000 до 1111111. В десятичной системе это соответствует диапазону от 0 до 127. Всего 128 значений. Знак порядка в ячейке не хранится. Но порядок, очевидно, может быть как положительным так и отрицательным. Разумно эти 128 значений разделить поровну между положительными и отрицательными значениями порядка. В таком случае между машинным порядком и истинным (назовем его математическим) устанавливается следующее соответствие:

Машинный порядок 0 1 2 3 . 64 65 . 125 126 127
Математический порядок -64 -63 -62 -61 . 0 1 . 61 62 63

Если обозначить машинный порядок Мр, а математический — р, то связь между ними ыразится такой формулой:

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

Полученная формула записана в десятичной системе. Поскольку 6410=4016 (проверьте!), то в шестнадцатеричной системе формула примет вид:

И, наконец, в двоичной системе:

    Теперь мы можем записать внутреннее представление числа 25,324 в форме с плавающей точкой.
  1. Переведем его в двоичную систему счисления с 24 значащими цифрами. 25,32410= 11001,01010010111100011012
  2. Запишем в форме нормализованного двоичного числа с плавающей точкой: 0,110010101001011110001101*10 101 Здесь мантисса, основание системы счисления (210=102) и порядок (510=1012)записаны в двоичной системе.
  3. Вычислим машинный порядок. Мр2 = 101 + 100 0000 = 100 0101
  4. Запишем представление числа в ячейке памяти.

01000101 11001010 10010111 10001101

Это и есть искомый результат. Его можно переписать в более компактной шестнадцатеричной форме:

Для того, чтобы получить внутреннее представление отрицательного числа -25,324,достаточно в полученном выше коде заменить в разряде знака числа 0 на 1.

11000101 11001010 10010111 10001101

А в шестнадцатеричной форме:

Никакого инвертирования, как для отрицательных чисел с фиксированной точкой, здесь не происходит.

Рассмотрим, наконец, вопрос о диапазоне чисел, представимых в форме с плавающей точкой. Очевидно, положительные и отрицательные числа расположены симметрично относительно нуля. Следовательно, максимальное и минимальное числа равны между собой по модулю: Rmax = |Rmin|. Наименьшее по абсолютной величине число равно нулю. Чему же равно Rmax? Это число с самой большой мантиссой и самым большим порядком:

Если перевести в десятичную систему, то получится

Rmax = (1 — 2 -24 ) * 2 64 = 10 19

Очевидно, что диапазон вещественных чисел значительно шире диапазона целых чисел. Если в результате вычислений получается число по модулю большее, чем Rmax, то происходит прерывание работы процессора. Такая ситуация называется переполнением при вычислениях с плавающей точкой. Наименьшее по модулю ненулевое значение равно:

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

Как известно из математики, множество действительных чисел бесконечно и непрерывно. Множество же вещественных чисел, представимых в памяти ЭВМ в форме с плавающей точкой, является ограниченным и дискретным. Каждое следующее значение получается прибавлением к мантиссе предыдущего единицы в последнем (24-м) разряде. Количество вещественных чисел, точно представимых в па-мяти машины, вычисляется по формуле:

N = 2 t * ( U — L+ 1) + 1.

Здесь t — количество двоичных разрядов мантиссы; U — максимальное значение математического порядка; L — минимальное значение порядка. Для рассмотренного нами варианта (t = 24, U = 63, L = -64) получается:

N = 2 146 683 548.

Все же остальные числа, не попадающие в это множество, но находящиеся в диапазоне допустимых значений, представляются в памяти приближенно (мантисса обрезается на 24-м разряде). А поскольку числа имеют погрешности, то и результаты вычислений с этими числами также будут содержать погрешность. Из сказанного следует вывод: вычисления с вещественными числами в компьютере выполняются приближенно.

Вопросы и задания
  1. Что такое форма с фиксированной точкой? Для представления каких чисел в компьютере она используется?
  2. Как в форме с фиксированной точкой представляются целые положительные и отрицательные числа?

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

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

Элементарная ячейка памяти ЭВМ имеет длину 8 бит (байт). Каждый байт имеет свой номер (его называют адресом ). Наибольшую последовательность бит, которую ЭВМ может обрабатывать как единое целое, называют машинным словом . Длина машинного слова зависит от разрядности процессора и может быть равной 16, 32, 64 битам и т.д.

Кодирование символов

Для кодирования символов достаточно одного байта. При этом можно представить 256 символов (с десятичными кодами от 0 до 255). Набор символов персональных ЭВМ, совместимых с IBM PC, чаще всего является расширением кода ASCII (American Standard Code for Information Interchange — стандартный американский код для обмена информацией). В настоящее время используются и двухбайтовые предсталения символов.

Двоично-десятичное кодирование

В некоторых случаях при представлении чисел в памяти ЭВМ используется смешанная двоично-десятичная «система счисления», где для хранения каждого десятичного знака нужен полубайт (4 бита) и десятичные цифры от 0 до 9 представляются соответствующими двоичными числами от 0000 до 1001. Например, упакованный десятичный формат, предназначенный для хранения целых чисел с 18-ю значащими цифрами и занимающий в памяти 10 байт (старший из которых знаковый), использует именно этот вариант.

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

Другой способ представления целых чисел — дополнительный код . Диапазон значений величин зависит от количества бит памяти, отведенных для их хранения. Например, величины типа Integer (все названия типов данных здесь и ниже представлены в том виде, в каком они приняты в языке программирования Turbo Pascal. В других языках такие типы данных тоже есть, но могут иметь другие названия) лежат в диапазоне от -32768 (-2 15 ) до 32767 (2 15 — 1) и для их хранения отводится 2 байта (16 бит); типа LongInt — в диапазоне от -2 31 до 2 31 — 1 и размещаются в 4 байтах (32 бита); типа Word — в диапазоне от 0 до 65535 (2 16 — 1) (используется 2 байта) и т.д.

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

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

1514131211109876543210

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

Например, если число 37 (10) = 100101 (2) объявлено величиной типа Integer ( шестнадцатибитовое со знаком ), то его прямым кодом будет 0000000000100101, а если величиной типа LongInt ( тридцатидвухбитовое со знаком ), то его прямой код будет 00000000000000000000000000100101. Для более компактной записи чаще используют шестнадцатеричное представление кода. Полученные коды можно переписать соответственно как 0025 (16) и 00000025 (16) .

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

  1. записать прямой код модуля числа;
  2. инвертировать его (заменить единицы нулями, нули — единицами);
  3. прибавить к инверсному коду единицу.

Например, запишем дополнительный код числа -37, интерпретируя его как величину типа LongInt (тридцатидвухбитовое со знаком):

  1. прямой код числа 37 есть 00000000000000000000000000100101;
  2. инверсный код 11111111111111111111111111011010;
  3. дополнительный код 11111111111111111111111111011011 или FFFFFFDB(16).

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

  1. вычесть из кода числа 1;
  2. инвертировать код;
  3. перевести в десятичную систему счисления. Полученное число записать со знаком минус.

Примеры. Запишем числа, соответствующие дополнительным кодам:

  1. 0000000000010111. Поскольку в старшем разряде записан нуль, то результат будет положительным. Это код числа 23.
  2. 1111111111000000. Здесь записан код отрицательного числа. Исполняем алгоритм: 1) 1111111111000000(2) — 1(2) = 1111111110111111(2); 2) 0000000001000000; 3) 1000000(2) = 64(10).
    Ответ: -64.

Кодирование вещественных чисел

Несколько иной способ применяется для представления в памяти персонального компьютера действительных чисел. Рассмотрим представление величин с плавающей точкой.

Любое действительное число можно записать в стандартном виде M × 10 p , где 1 £ M p — целое. Например, 120100000 = 1,201 × 10 8 . Поскольку каждая позиция десятичного числа отличается от соседней на степень числа 10, умножение на 10 эквивалентно сдвигу десятичной запятой на одну позицию вправо. Аналогично деление на 10 сдвигает десятичную запятую на позицию влево. Поэтому приведенный выше пример можно продолжить: 120100000 = 1,201 × 10 8 = 0,1201 × 10 9 = 12,01 × 10 7 . Десятичная запятая «плавает» в числе и больше не помечает абсолютное место между целой и дробной частями.

В приведенной выше записи M называют мантиссой числа, а p — его порядком. Для того чтобы сохранить максимальную точность, вычислительные машины почти всегда хранят мантиссу в нормализованном виде, что означает, что мантисса в данном случае есть число, лежащее между 1(10) и 2(10) (1 £ M

Тип Диапазон Мантисса Байты
Real 2,9×10 -39 ..1,7×10 38 11-12 6
Single 1,5×10 -45 ..3,4×10 38 7-8 4
Double 5,0×10 -324 ..1,7×10 308 15-16 8
Extended 3,4×10 -4932 ..1,1×10 4932 19-20 10

Покажем преобразование действительного числа для представления его в памяти ЭВМ на примере величины типа Double.

Как видно из таблицы, величина это типа занимает в памяти 8 байт. На рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):

S Смещенный порядок Мантисса
63 62..52 51..0

Можно заметить, что старший бит, отведенный под мантиссу, имеет номер 51, т.е. мантисса занимает младшие 52 бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна 1, здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка хранится здесь не как целое число, представленное в дополнительном коде. Для упрощения вычислений и сравнения действительных чисел значение порядка в ЭВМ хранится в виде смещенного числа, т.е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает 11 бит и имеет диапазон от 2 -1023 до 2 1023 , поэтому смещение равно 1023(10) = 1111111111(2). Наконец, бит с номером 63 указывает на знак числа.

Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ:

  1. перевести модуль данного числа в двоичную систему счисления;
  2. нормализовать двоичное число, т.е. записать в виде M × 2 p , где M — мантисса (ее целая часть равна 1(2)) и p — порядок, записанный в десятичной системе счисления;
  3. прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления;
  4. учитывая знак заданного числа (0 — положительное; 1 — отрицательное), выписать его представление в памяти ЭВМ.

Пример. Запишем код числа -312,3125.

  1. Двоичная запись модуля этого числа имеет вид 100111000,0101.
  2. Имеем 100111000,0101 = 1,001110000101 × 2 8 .
  3. Получаем смещенный порядок 8 + 1023 = 1031. Далее имеем 1031(10) = 10000000111(2).
  4. Окончательно

1 10000000111 0011100001010000000000000000000000000000000000000000
63 62..52 51..0

Очевидно, что более компактно полученный код стоит записать следующим образом: C073850000000000(16).

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

Пример. Пусть дан код 3FEC600000000000(16) или

0 01111111110 1100011000000000000000000000000000000000000000000000
63 62..52 51..0

  1. Прежде всего замечаем, что это код положительного числа, поскольку в разряде с номером 63 записан нуль. Получим порядок этого числа: 01111111110(2) = 1022(10); 1022 — 1023 = -1.
  2. Число имеет вид 1,1100011 × 2 -1 или 0,11100011.
  3. Переводом в десятичную систему счисления получаем 0,88671875.

См. также стандарт IEEE 754

Представление числовой информации в памяти компьютера Текст научной статьи по специальности «Математика»

NUMBER SYSTEM / НОРМАЛИЗОВАННАЯ ФОРМА ЗАПИСИ ЧИСЛА / THE NORMALIZED NUMBER / ДОПОЛНИТЕЛЬНЫЙ КОД / ADDITIONAL CODE / ФОРМАТ С ФИКСИРОВАННОЙ ТОЧКОЙ / FIXED-POINT FORMAT / FLOATING-POINT FORMAT / ФОРМАТ С ПЛАВАЮЩЕЙ ТОЧКОЙ / СИСТЕМА СЧИСЛЕНИЯ

Аннотация научной статьи по математике, автор научной работы — Итпекова Галина Семёновна

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Итпекова Галина Семёновна

Особенности представления вещественных чисел в постбинарных форматах

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

Модулярно-логарифмический сопроцессор для массовых арифметических вычислений
Арифметика многократной точности на основе систем остаточных классов
Языковые средства комплекса ПСПСЦУ. Общие элементы
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Presentation of Numerical Information in the Computer Memory

The article discusses ways of machine number presentation and questions of realization of the binary arithmetic in the computer memory. On the basis of the theorems, the author establishes a close relationship between the number systems with bases 2 n. We consider examples of the internal presentation of a number in the format of a fixed-point and floating-point number in floating point format

Текст научной работы на тему «Представление числовой информации в памяти компьютера»

ПРЕДСТАВЛЕНИЕ ЧИСЛОВОЙ ИНФОРМАЦИИ В ПАМЯТИ КОМПЬЮТЕРА

Хакасский государственный университет им. Н. Ф. Катанова

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

Ключевые слова: система счисления, нормализованная форма записи числа, дополнительный код, формат с фиксированной точкой, формат с плавающей точкой.

Известно, что компьютер осуществляет обработку числовой, символьной, графической и звуковой информации, представленной в двоичном коде. Разделы информатики, посвящённые компьютерным технологиям обработки информации, включают темы представления соответствующих видов данных (чисел, символов, изображения, звука). Для того чтобы хранить информацию в памяти ЭВМ, принимают некоторые соглашения о способах представления и организации данных. В учебной литературе существуют различные подходы к изложению вопросов, связанных с пониманием принципов кодирования любой информации [1; 2; 3 и др.].

Объектом данной статьи является кодирование информации, а предметом — способы машинного представления числа. Выбор темы обусловлен тем, что решение вычислительных задач с использованием компьютера сводится к преобразованию числовой информации, и при этом возникают вопросы, касающиеся представления чисел и реализации двоичной арифметики в ЭВМ. Так как в памяти компьютера хранятся целые и вещественные числа и при этом числовые данные представляются определёнными форматами, то понимание вопросов кодирования числовой информации требует знаний о системах счисления и основах арифметики нормализованных чисел.

Когда речь идёт о процессе формирования представления числовой информации в памяти компьютера, то имеют в виду, что она представлена в двоичной системе счисления. Под системой счисления принято понимать совокупность приёмов обозначения (записи) чисел [2]. Наиболее совершенными являются позиционные системы счисления. В них значение каждой цифры в записи числа зависит от её положения (позиции) в ряду других чисел, изображающих число. Минимальной системой, в которой реализуется принцип позиционности в цифровой форме записи числа, является двоичная система счисления, основание которой q = 2.

Как известно, двоичная система является системой, пригодной для аппаратной реализации. Более глубокое изучение данной системы в прикладной математике началось с 30-х гг. XX века. Это было обусловлено, с одной стороны, потребностью создания надёжных и простых по конструкции счётных механических устройств, а с другой — простотой двоичной арифметики. В 1946 году А. Беркс, Х. Гольдстайн и Дж. фон Нейман опубликовали работу о проекте первой ЭВМ с хранимой в памяти программой [2]. Эта работа утвердила двоичную арифметику в качестве общепринятой основы при конструировании ЭВМ с программным управлением.

Общеизвестно, что естественным обобщением двоичной системы являются системы с основаниями q = 8 и q = 16. Эти системы счисления широко распространены, и между ними существует взаимосвязь, которая определяется двумя теоремами [2].

Теорема 1. Для записи целого двоичного числа в системе счисления с основанием q = 2″ достаточно данное двоичное число разбить на грани справа налево (т. е. от младших разрядов к старшим) по » цифр в каждой грани. Затем каждую такую грань следует рассмотреть как » — разрядное двоичное число и записать его как цифру в системе с основанием q = 2П .

Доказательство. Пусть дано (abcdef ) . Выполняя преобразования, получим

(abcdef) q = a ■ q5 + b ■ q4 + c ■ q3 + d ■ q2 + eq + f = = (aq2 + bq + c)q~

= A ■ q3 + B = Ap + B = ABp ; Ap = aq2 + bq + c = abcq;

BP = dq2 + eq + f = defq.

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

Пример 1. Число 111011101002 заменить равным ему числом восьмеричной системы счисления, т. е. системы с основанием q = 23.

В соответствии с теоремой 1 разбиваем число от младших разрядов к старшим по три цифры в каждой грани:

011 101 110 100 3 5 6 4

-(aq2 + bq + c)q3 + (dq2 + eq + f )=

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

112 = 38, 1012 = 58, 1102 = 68, 1002 = 48.

Итак, 111011101002 = 35648.

Теорема 2. Для замены целого числа, записанного в системе с основанием p = 2П, равным ему числом в двоичной системе счисления, достаточно каждую цифру данного числа заменить и-разрядным двоичным числом.

Доказательство. Пусть дано ABC , где p = q3.

= (aq2 + bq + c)(q3) + (dq2 + eq + f )q3 + (kq2 + Iq + m)= = aq8 + bq1 + cq6 + dq5 + eq 4 + fq3 + kq2 +1 q + m = = abcde fklmnq .

Пример 2. Число 27538 заменить равным ему двоичным числом.

В соответствии с теоремой 2 каждую цифру данного числа представим трёхразрядным двоичным числом:

010 111 101 011

Получим равенство 27538 = 0101111010112.

Алгоритмы замены целых чисел и правильных дробей какой-либо системы счисления с основанием q равными числами другой системы с основанием p приводит В. Н. Касаткин [2]. Кроме того, автор знакомит со смешанными системами счисления.

В результате анализа учебной и учебно-методической литературы выявлено, что при изложении информации о представлении чисел в памяти ЭВМ используются разные приёмы. В учебнике И. Г. Семакина [1] содержание учебной информации о представлении чисел связано со структурой памяти компьютера. Описание методики представления информации в двоичной форме дано в учебном пособии под редакцией А. И. Семенова [3]. Тема «Кодирование числовой информации» представлена через обсуждение естественной и экспоненциальной форм записи числа и формата с фиксированной и плавающей точкой в пособии О. Л. Соколовой [4]. Вопросы реализации арифметики в ЭВМ уточняются В. Н. Касаткиным через понятия нормализации чисел. Далее речь пойдет о нормализованных числах, так как запись чисел в нормализованной форме используется при представлении в памяти ЭВМ вещественных чисел. Именно в случае понимания, что такое «мантисса» и «порядок» нормализованного числа, происходит овладение подлинной культурой точных вычислений с использованием компьютера.

Определение. Число А называется нормализованным, если оно представлено в виде

где M10 — мантисса, которая представляет собой десятичную правильную дробь, равную или больше 0,1 (т. е. 0,1 < M10 < 1); p10 - порядок, он является целым десятичным числом.

Приведём примеры нормализованного представления чисел:

29710 = 0,297-103 (М10 = 0,297; p 10 = 3),

0,03110 = 0,31-10-1 (м 10 = 0,31; p 10 =-1),

-34,17610 =-0,34176-102 (М10 =-0,34176; p 10 = 2).

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

Арифметика нормализованных чисел тесно связана с её реализацией в вычислительных устройствах. Эта связь состоит в том, что в любом вычислительном устройстве, использующем арифметику нормализованных чисел, в памяти для хранения результатов в сумматоре отводится установленное число разрядов как для порядка (p10), так и для мантиссы (М10). Кроме того, определяется способ хранения знаков мантиссы и порядка. Нормализация чисел позволяет создать единую арифметику. Для вычислительных устройств нет проблемы распознавания типа числа, так как арифметическое устройство работает только с мантиссами и порядками.

Перейдём к рассмотрению вопроса о внутреннем (машинном) представлении числа на примере 16-разрядной машины. Числа в памяти ЭВМ хранятся в двух форматах: в формате с фиксированной точкой и в формате с плавающей точкой. Под точкой подразумевается знак разделения целой и дробной части числа. Формат с фиксированной точкой используется для хранения в памяти целых чисел. В случае 16-разрядной машины число занимает одно машинное слово памяти (16 бит) и для хранения чисел отводится 16 разрядов, которые в совокупности представляют двухбайтовую разрядную сетку.

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

представления числа все разряды ячейки отводятся под него. Например, в байте (8 бит) можно представить беззнаковые числа от 0 до 28 — 1 = 255. В двухбайтовой разрядной сетке можно сохранить диапазон чисел от 0 до 216 — 1 = 65535. Поэтому, если известно, что числовая величина является неотрицательной, то выгоднее рассматривать её как беззнаковую.

Для представления целых чисел со знаком самый старший (левый) бит отводится под знак числа, остальные разряды — под само число. Знак положительного числа кодируется нулём, а знак отрицательного числа кодируется единицей. Код знака числа хранит первый слева двоичный разряд. Например, в байте можно представить знаковые целые числа от -27 = -128 до 27 — 1 = 127, в двухбайтовой разрядной сетке диапазон целых чисел со знаком будет составлять от -215 = -32768 до 215 — 1 = 32767. Покажем на примерах, как получить внутреннее представление целого числа N в формате с фиксированной точкой и вещественного числа в формате с плавающей точкой.

Пример 3. Представить число N = 160710 в двухбайтовой разрядной сетке.

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

N = 160710 = 110010001112.

2. Изобразим шестнадцатиразрядную сетку размером в 2 байта = 16 бит (рис. 1).

Рис. 1. Шастнадцатиразрядная сетка 3. Впишем число 110010001112, начиная с младшего разряда (рис. 2).

Рис. 2. Запись числа в сетку 4. Заполним оставшиеся разряды нулями (рис. 3).

Рис. 3. Заполнение оставшихся разрядов нулями На рисунке 3 изображено внутреннее представление числа N = 160710 в двухбайтовой разрядной сетке.

Пример 4. Представить отрицательное число N = -160710 в двухбайтовой разрядной сетке.

1. Переведём модуль числа -160710 в двоичную систему счисления. 160710 = 110010001112.

2. Изобразим шестнадцатиразрядную сетку (рис. 1).

3. Следуя пунктам 3-4 из примера 3, получим внутреннее представление модуля числа. 0000 0110 0100 0111 — прямой код числа.

4. Найдём обратный код числа, заменив в прямом коде нули на единицы, а единицы на нули: 1111 1001 1011 1000 — обратный код.

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

1111 1001 1011 1000 1

1111 1001 1011 1001 — дополнительный код

6. Впишем дополнительный код в разрядную сетку (рис. 4).

Рис. 4. Представление целого отрицательного числа 28

Внутреннее представление отрицательного числа N = -160710 в двухбайтовой разрядной сетке изображено на рисунке 4. Описанный в примере 4 способ представления целого отрицательного числа называют дополнительным кодом. Старший разряд в представлении любого отрицательного числа равен 1. Его принято называть знаковым разрядом, так как он указывает на знак числа.

Возникает вопрос, с какой целью отрицательные числа записываются в виде дополнительного кода и как получить дополнительный код отрицательного числа? Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно было бы проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и разного знака, сводится к их поразрядному сложению. Алгоритм получения дополнительного кода положительного и отрицательного числа описан в практикуме по информатике [5].

Таким образом, применение дополнительного кода для внутреннего представления отрицательных чисел даёт возможность заменить операцию вычитания операцией сложения с отрицательным числом: N — М = N + (-М). Очевидно, должно выполняться следующее равенство: N + (- Ы) = 0. Выполним такое сложение для полученных выше чисел 1607 и -1607.

_ 0000 0110 0100 0111 _ 1607

1111 1001 1011 1000 1607

1 0000 0000 0000 0000 0

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

Перейдём к кодированию вещественных чисел. Недостатком представления чисел в формате с фиксированной запятой является конечный диапазон представления величин, недостаточный для решения математических, физических, экономических и других задач, в которых используются как очень малые, так и очень большие числа. Поэтому для представления вещественных чисел используют другой формат — формат с плавающей точкой (запятой). Число обычной точности в данном формате занимает в памяти компьютера четыре байта, а в случае представления числа двойной точности — восемь байт.

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

При представлении чисел с плавающей запятой часть разрядов ячейки отводится для записи порядка числа, остальные разряды — для записи мантиссы. По одному разряду в каждой группе отводится для изображения знака порядка и знака мантиссы. Для того чтобы не хранить знак порядка, был придуман так называемый смещённый порядок (СП) [5]. Он рассчитывается по формуле СП = р + 272, где а — количество разрядов, отводимых под порядок.

Запишем алгоритм представления числа с плавающей точкой (запятой):

1) перевести число из системы счисления с основанием р в двоичную;

2) представить двоичное число в нормализованной экспоненциальной форме;

3) рассчитать смещённый порядок числа;

4) поместить знак, порядок и мантиссу в 32-разрядную сетку.

Пример 5. Представить число 25,324 в формате с плавающей точкой.

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

0,32410=0,0101001011100011012. 25, 32410= 11001,0101001011100011012

2. Запишем представленное в двоичной системе счисления число в форме нормализованного двоичного числа с плавающей точкой:

11001,0101001011100011012 = 0,110010101001011100011012 ■ 10101

3. Вычислим смещённый порядок:

СП = 1012 + 10000002= 1000101

4. Запишем представление числа в ячейке памяти (рис. 5).

0 1|о|о|о|1|о|1 1 | 1 | 0| 0| 1 I 0 I 1 I 0 I 1 I 0 I 0| 1 I 0 I 1 I 1 I 1 I 1 I 0 I 0 I 0| 1 I 1 I 0 I 1 1

Смещенный порядок Мантисса |

| Знак числа ‘[‘Знак мантиссы

Рис. 5. Представление числа в ячейке памяти 29

Можно заметить, что представление действительного числа не очень удобно изображать в двоичной системе, поэтому с практической точки зрения используют взаимное преобразование двоичных, восьмеричных и шестнадцатеричных чисел [6]. Искомый результат в шестнадцатеричной форме будет иметь вид 45CA978D.

Для того чтобы получить внутреннее представление отрицательного числа -25,324, достаточно в полученном выше коде заменить в знаке разряда число 0 на 1 (рис. 6), шестнадцатеричная форма будет иметь вид: C5CA978D.

Рис. 6. Представление числа -25,324 в ячейке памяти

Рассмотрим вопрос о диапазоне вещественных чисел. Максимальное число, представленное в формате с плавающей точкой, — это число с самой большой мантиссой и самым большим порядком:

Если перевести в десятичную систему, то получится

i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

R max =(1 — 2 -24 )x 2 64 «10 19 .

Множество вещественных чисел, представляемых в памяти ЭВМ в формате с плавающей точкой, является ограниченным и дискретным. Каждое следующее значение получается прибавлением к мантиссе предыдущего единицы в последнем разряде. В учебнике [1] указывается формула, которая позволяет вычислить количество вещественных чисел, точно представимых в памяти машины:

В приведённой формуле t — количество двоичных разрядов мантиссы; U — максимальное значение математического порядка; L — минимальное значение порядка. Все числа, не попадающие во множество вещественных чисел, точно представимых в памяти машины, представляются в ней приближённо. При этом мантисса обрезается на последнем разряде. Результаты вычислений с такими числами будут содержать погрешность. Отсюда следует вывод: вычисления с вещественными числами в компьютере выполняются приблизительно.

1. Семакин, И. Г. Информатика. Базовый курс для 7-9 классов / И. Г. Семакин, Л. А. Залогова, С. В. Русаков, Л. В. Шестакова. — М.: Лаборатория Базовых Знаний, 2000. — С. 316-321.

2. Касаткин, В. Н. Информация, алгоритмы, ЭВМ: пособие для учителя / В. Н. Касаткин. — М.: Просвещение, 1991. — С. 52-53.

3. Семёнов, А. И. Информатика: Практикум / под ред. А. И. Семёнова / А. И. Семёнов. — Абакан: Изд-во ХГУ им. Н. Ф. Катанова, 2003. -С. 9-12.

4. Соколова, О. Л. Универсальные поурочные разработки по информатике: 10 класс / О. Л. Соколова. — М.: ВАКО, 2007. — С. 226-232.

5. Могилёв, А. В. Практикум по информатике: учеб. пособие для студ. высш. учеб. заведений / А. В. Могилёв, Н. И. Пак, Е. К. Хеннер; под ред. Е. К. Хеннера. — 5-е изд., стер. — М.: Издательский центр «Академия», 2009. — С. 33-36.

6. Могилёв, А. В. Информатика: учеб. пособие для студ. пед. вузов / А. В. Могилёв, Н. И. Пак, Е. К. Хеннер; под ред. Е. К. Хеннера. -7-е изд., стер. — М.: Издательский центр «Академия», 2009. — С. 28-33.

© Итпекова Г. С., 2013

ГИБРИДИЗАЦИЯ КАК ОДИН ИЗ ВЕДУЩИХ ТВОРЧЕСКИХ МЕТОДОВ СОЗДАНИЯ ДИЗАЙНЕРСКОЙ ИНФОГРАФИКИ

Научный руководитель — А. Н. Лаврентьев, доктор искусствоведения, профессор кафедры коммуникативного дизайна

МГХПА им. С. Г. Строганова Московская государственная художественно-промышленная академия (МГХПА) им. С. Г. Строганова

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

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

Анализ фактов исторической и современной информационной графики позволяет утверждать, что основной тенденцией её развития является гибридизация (термин применяется нами в качестве рабочего), т. е. наложение одного типа/вида инфографики на другой и/или их сочетание в разных вариантах. Это обусловлено необходимостью повышать эффективность инфографики, которая должна передавать больший объём информации на единице площади.

Для инфографа (иначе — дизайнера инфографики) гибридизация является одним из важнейших творческих инструментов дизайна, не случайно мы считаем её одним из ведущих способов разработки дизайнерских ин-

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *