Главная страница
Навигация по странице:

  • Форматы данных

  • Представление чисел в формате с фиксированной запятой.

  • Представление чисел в формате с плавающей запятой.

  • Учебное пособие по информатике 2014. Основы информатики


    Скачать 4.61 Mb.
    НазваниеОсновы информатики
    АнкорУчебное пособие по информатике 2014.pdf
    Дата28.03.2018
    Размер4.61 Mb.
    Формат файлаpdf
    Имя файлаУчебное пособие по информатике 2014.pdf
    ТипУчебное пособие
    #17317
    страница13 из 28
    1   ...   9   10   11   12   13   14   15   16   ...   28

    Представление символьной информации в ЭВМ
    В отличие от обычной словесной формы, принятой в письменном виде, символьная информация хранится и обрабатывается в памяти ЭВМ в форме цифрового кода. Например, можно обозначить каждую букву числами, соответствующими ее порядковому номеру в алфавите: А - 01, Б - 02, В - 03,
    Г - 04, ... , Э - 30, Ю - 31, Я - 32. Точно так же можно договориться обозначать точку числом 33, запятую - 34 и т.д. Так как в устройствах автоматической обработки информации используются двоичные коды, то обозначения букв надо перевести в двоичную систему. Тогда буквы будут обозначаться следующим образом: А - 000001, Б - 000010, В - 000011, Г -
    000100, ... , Э - 011110, Ю - 011111, Я - 100000. При таком кодировании любое слово можно представить в виде последовательности кодовых групп, составленных из 0 и 1. Например, слово ЭВМ выглядит так:
    011110000011001110.
    При преобразовании символов (знаков) в цифровой код между множествами символов и кодов должно иметь место взаимно-однозначное соответствие, т.е. разным символам должны быть назначены разные цифровые коды, и наоборот. Это условие является единственным необходимым требованием при построении схемы преобразования символов в числа. Однако существует ряд практических соглашений, принимаемых при построении схемы преобразования исходя из соображений наглядности, эффективности, стандартизации. Например, какое бы число ни назначили коду для знака 0 (не следует путать с числом 0), знаку 1 удобно назначить число, на единицу большее, чем код 0, и т.д. до знака 9. Аналогичная ситуация возникает и при кодировке букв алфавита: код для Б на единицу больше кода для А, а код для В на единицу больше кода для Б и т. д. Таким образом, из соображений наглядности и легкости запоминания целесообразно множества символов, упорядоченных по какому-либо признаку (например, лексико-графическому), кодировать также с помощью упорядоченной последовательности чисел.
    Другим важным моментом при организации кодировки символьной информации является эффективное использование оперативной памяти ЭВМ.

    108
    Так как общеупотребительными являются примерно 100 знаков (сюда помимо цифр, букв русского и английского алфавитов, знаков препинания, арифметических знаков входят знаки перевода строки, возврата каретки, возврата на шаг и т.п.), то для взаимно-однозначного преобразования всех знаков в коды достаточно примерно сотни чисел. Значение этого выбора заключается в том, что для размещения числа из этого диапазона в оперативной памяти достаточно одного байта, а не машинного слова.
    Следовательно, при такой организации кодировки достигается существенная экономия объема памяти.
    При назначении кодов знакам надо также учитывать соглашения, касающиеся стандартизации кодировки. Можно назначить знаковые коды по своему выбору, но тогда возникнут трудности, связанные с необходимостью обмена информацией с другими организациями, использующими кодировку, отличную от нашей. В настоящее время существует несколько широко распространенных схем кодирования. Например, код BCD (Binary-Coded
    Decimal) - двоично-десятичный код используется для представления чисел, при котором каждая десятичная цифра записывается своим четырехбитовым двоичным эквивалентом. Этот код может оказаться полезным, когда нужно преобразовать строку числовых знаков, например, строку из числовых знаков
    «2537» в число 2537, над которым затем будут производиться арифметические действия. Расширением этого кода является EBCDIC
    (Extended Binary-Coded Decimal Interchange Code) - расширенный двоично- десятичный код обмена информацией, который преобразует как числовые, так и буквенные строки.
    В ЭВМ, начиная с типа PDP (или СМ) и по сегодняшний день в IBM
    PC применяется код ASCII (American Standard Code for Information
    Interchange) - американский стандартный код обмена информацией. Этот код генерируется некоторыми внешними устройствами (принтером, АЦПУ) и используется для обмена данными между ними и оперативной памятью
    ЭВМ. Например, когда нажимаем на терминале клавишу G, то в результате этого действия код ASCII для символа G (1000111) передается в ЭВМ. А если надо этот символ распечатать на АЦПУ, то его код ASCII должен быть послан на печатающее устройство.
    С развитием техники понадобилось вводить национальные варианты
    ASCII. Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения национальных символов на месте @ [ \ ] ^ ` { | }

    . В дополнение к этому, на месте # может быть размещён £, а на месте $ — ¤. Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов. Вариант ASCII без национальных символов называется US-ASCII, или «International Reference Version».
    Для некоторых языков с нелатинской письменностью (русского, греческого, арабского, иврита) существовали более радикальные модификации ASCII. Одним из вариантов был отказ от строчных латинских букв — на их месте размещались национальные символы (для русского и греческого — только заглавные буквы). Другой вариант — переключение

    109 между US-ASCII и национальным вариантом «на лету» с помощью символов
    SO (Shift Out) и SI (Shift In) — в этом случае в национальном варианте можно полностью устранить латинские буквы и занять всё пространство под свои символы.
    Впоследствии оказалось удобнее использовать 8-битные кодировки
    (кодовые страницы), где нижнюю половину кодовой таблицы (0—127) занимают символы US-ASCII, а верхнюю (128—255) — дополнительные символы, включая набор национальных символов. Таким образом, верхняя половина таблицы ASCII до повсеместного внедрения Юникода (UNICODE) активно использовалась для представления локализированных символов, букв местного языка. Отсутствие единого стандарта размещения кириллических символов в таблице ASCII доставляло множество проблем с кодировками (КОИ-8, Windows-1251 и другие). Другие языки с нелатинской письменностью тоже страдали из-за наличия нескольких разных кодировок.
    Рисунок 3.21 – Таблица кода ASCII

    110
    Отечественной версией кода ASCII являлся код КОИ-7 (двоичный семибитовый код обмена информацией), который совпадает с ним, за исключением букв русского алфавита. Для использования с национальными алфавитами и прочими символами, не входящими в ASCII чаще всего стала применяться старшая половина пространства 8-битных кодов (128–255), позволяющее использовать до 128 дополнительных символов, чего достаточно для большинства европейских языков.
    КОИ-8, KOI8 — восьмибитовая ASCII-совместимая кодовая страница, разработанная для кодирования букв кириллических алфавитов.
    Разработчики КОИ-8 поместили символы русского алфавита в верхней части кодовой таблицы таким образом, что позиции кириллических символов соответствуют их фонетическим аналогам в английском алфавите в нижней части таблицы. Это означает, что если в тексте, написанном в КОИ-8, убирать восьмой бит каждого символа, то получается «читаемый» текст, хотя он и написан латинскими символами. Например, слова «Русский Текст» превратились бы в «rUSSKIJ tEKST». Как побочное следствие, символы кириллицы оказались расположены не в алфавитном порядке.
    Существует несколько вариантов кодировки КОИ-8 для различных кириллических алфавитов, расширяющие определённые коды (общий диапазон 192—255 с 32 русскими буквами в двух регистрах остаётся неизменным во всех вариантах). Русский алфавит описывается в кодировке
    KOI8-R, украинский — в KOI8-U.
    KOI8-R стал фактически стандартом для русской кириллицы в 1990-х годах в юникс-подобных операционных системах и электронной почте.
    Юникод (Unicode) — стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков. Стандарт состоит из двух основных разделов: универсальный набор символов (UCS, universal
    character set) и семейство кодировок (UTF, Unicode transformation format).
    Универсальный набор символов задаёт однозначное соответствие символов кодам
    - элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS.
    Коды в стандарте Юникод разделены на несколько областей. Область с кодами от U+0000 до U+007F содержит символы набора ASCII с соответствующими кодами. Далее расположены области знаков различных письменностей, знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем.
    [7]
    Под символы кириллицы выделены области знаков с кодами от U+0400 до U+052F, от U+2DE0 до
    U+2DFF, от U+A640 до U+A69F
    Универсальная система кодирования (Юникод) представляет собой набор графических символов и способ их кодирования для компьютерной обработки текстовых данных.
    Графические символы - это символы, имеющие видимое изображение.
    Графическим символам противопоставляются управляющие символы и

    111 символы форматирования.
    Графические символы включают в себя следующие группы:

    буквы, содержащиеся хотя бы в одном из обслуживаемых алфавитов;

    цифры;

    знаки пунктуации;

    специальные знаки (математические, технические, идеограммы и пр.);

    разделители.
    Юникод — это система для линейного представления текста. Символы, имеющие дополнительные над- или подстрочные элементы, могут быть представлены в виде построенной по определённым правилам последовательности кодов (составной вариант, composite character) или в виде единого символа (монолитный вариант, precomposed character).
    Форматы данных
    Под данными будем понимать информацию, представленную в виде, пригодном для обработки автоматическими средствами, например, в двоичном коде. Формат представления данных в памяти ЭВМ зависит от ее архитектуры.
    Данные, обрабатываемые ЭВМ, делятся на три группы: логические коды, числа с фиксированной запятой и числа с плавающей запятой.
    Представление логических кодов. Логические коды могут размещаться в отдельных байтах и в словах. Для их представления используются все разряды: для байта от 0-го до 7-го, для слова - от 0-го до 15-го. Логическими кодами могут быть представлены символьные величины, числа без знака и битовые величины.
    Символьные величины задаются в коде ASCII (КОИ-7), каждый символ занимает один байт, разряд 7 которого всегда содержит 0. Символы строки размещаются в последовательно-адресуемых байтах оперативной памяти.
    Например, символьная строка ABCDE (коды ASCII: A- 101 8
    ,B- 102 8
    ,C- 103 8
    ,
    D- 104 8
    ,Е- 105 8
    ), первый знак которой помещается в ячейку с адресом 1000
    (адреса представлены в 8-ричной системе счисления), размещается в оперативной памяти следующим образом:
    1001 1000
    1003 1002
    1005 1004
    Рисунок 3.22 – Размещение информации в памяти
    Числа без знака имеют диапазон представления от 000 до 377 8
    -для байта, от 000000 до 177777 8
    - для слова. Битовые величины задают значения отдельных разрядов байта или слова.
    Представление чисел в формате с фиксированной запятой. Числа с фиксированной запятой могут занимать байт или слово. Если число с
    0 1 0 0 0 0 1 0 0 1 0 0 0 0 1
    0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1
    1 0 1 0 0 0 1 1
    0

    112 фиксированной запятой занимает байт, то для его представления используются разряды с 0-го по 6-й. Разряд 7 называется знаковым. При размещении числа с фиксированной запятой в слове для его представления используются разряды с 0-го по 14-й. Знак числа содержится в разряде 15.
    Значения знакового разряда: 0 - для положительных чисел; 1 - для отрицательных чисел.
    Отрицательные числа в формате с фиксированной запятой представляются в дополнительном коде (посредством операции дополнения до 2-х).
    Таблица 3.14 – Примеры представления чисел с фиксированной запятой
    Байт
    Слово
    Число
    Восьмеричный код
    Двоичный код
    Восьмеричный код
    Двоичный код
    +5 005 00000101 000005 0000000000000101
    +63 077 00111111 000077 0000000000111111
    -5 373 11111011 177773 1111111111111011
    -63 315 11001101 177715 1111111111001101 0
    000 00000000 000000 0000000000000000
    Диапазон представления чисел с фиксированной запятой: для байта - от
    - 128 10
    до +127 10
    ; для слова - от –32768 10
    до +32767 10
    . При выполнении операций над числами, представленными в формате с фиксированной запятой, они масштабируются таким образом, чтобы каждое число лежало в интервале (-1, +1). Другими словами, в этом случае ЭВМ оперирует только с числами, по модулю не превосходящими единицы. При этом необходимо следить за тем, чтобы в процессе операций результат не получился большим, чем 2
    k
    - 1, где k - число разрядов, отведенных для представления в машине.
    Такая опасность есть при выполнении операций сложения и деления.
    Опасность представляют также операции вычитания и умножения. При вычитании может получиться так, что разность станет числом меньшим, чем представляется в машине, и результат исчезнет. При многократном умножении (из-за того, что умножаются числа, меньшие единицы) может произойти то же самое. Поэтому при использовании формата представления чисел с фиксированной запятой приходится следить как за случаями возможного переполнения разрядной сетки машины, так и за случаями, связанными с появлением машинного нуля. Необходимость постоянно следить за тем, чтобы числа в машине не вышли за пределы интервала (-1,
    +1), а также неизбежное в таких устройствах накопление абсолютной погрешности вычислений из-за перемасштабирования, при котором цифры младших разрядов (а именно в них накапливается абсолютная погрешность) передвигаются в старшие разряды, привели к тому, что в универсальных
    ЭВМ представление чисел с фиксированной запятой практически перестало применяться. Оно сохраняется в специализированных вычислительных системах, где диапазон изменения чисел заранее проанализирован, в

    113 некоторых микропроцессорах и микро-ЭВМ.
    Представление чисел в формате с плавающей запятой. Любое вещественное число х, представленное в системе счисления с основанием N, можно записать в виде
    xmN
    ±p
    , где m - мантисса, р - характеристика (или порядок) числа.
    Если |m| < 1, то запись числа называется нормализованной слева.
    Следующие примеры показывают, как можно представить любое число в форме с плавающей запятой: а) в десятичной системе счисления
    372,95 = 0, 37295

    10 3
    ;
    25 = 0,025

    10 3
    = 0,25

    10 2
    ;
    0,0000015 = 0,15

    10
    -5
    = 0,015

    10
    -4
    ; б) в двоичной системе счисления
    11010, 1101 = 0,0110101101

    2 6
    ;
    0,011011=0,11011 х2
    -1
    ;
    0,1=0,1x2 0
    (здесь порядок определяет, на сколько разрядов необходимо осуществить сдвиг относительно запятой).
    Из этих примеров видно, что представление чисел в форме с плавающей запятой неоднозначно. В ЭВМ с целью минимизации погрешности при вычислениях и эффективного использования памяти применяют процедуру нормализации справа.
    Число называют нормализованным справа, если после запятой в мантиссе стоит не нуль. В дальнейшем под нормализацией числа будем понимать нормализацию справа.
    Нормализованное число одинарной точности, представленное в формате с плавающей запятой, записывается в память следующим образом: знак числа - в бите 15 первого слова (0 - для положительных и 1 - для отрицательных чисел); порядок размещается в битах 7 -14 первого слова, а мантисса занимает остальные 23 бита в двух словах. Нормализованное число двойной точности записывается в четыре слова памяти и отличается от представления чисел одинарной точностью только тем, что продолжение мантиссы размещается в следующих за первым трех последовательных словах памяти, а всего под мантиссу в этом случае отводится 55 бит.
    Порядок числа с плавающей запятой изменяется в диапазоне от -128 10
    (200 8
    ) до +127 10
    (177 8
    ) и запоминается увеличенным на 128 10
    (200 8
    ). Такой способ представления порядка называется смещенным.
    Следует иметь в виду, что, хотя для мантиссы отведены 23 разряда -для чисел одинарной точности и 55 разрядов - для чисел двойной точности, в операциях участвуют 24 и 56 разрядов соответственно, так как старший разряд мантиссы нормализованного числа не хранится, т.е. имеет место так

    114 называемый скрытый разряд. Однако при аппаратном выполнении операций этот разряд автоматически восстанавливается и учитывается при выполнении операций. Порядок числа также учитывает скрытый старший разряд мантиссы.
    Также заметим, что нормализованная мантисса в двоичной системе счисления всегда представляется десятичным числом т, лежащим в диапазоне 0,5

    m < 1.
    Примеры представления чисел с плавающей запятой:
    1)0,1 10
    = 0,0(6314)
    8
    = 0,000(1100)
    2
    = 0,(1100)
    2

    2
    -3
    ; -3 10
    = (-3 + 200)
    8
    =
    175 8
    = 01111101 2
    Заметим, что в этом примере мантисса представлена бесконечной периодической дробью, поэтому последний учитываемый разряд мантиссы округляется.
    2) -49,5 10
    = -61,4 8
    = -110001,100 2
    = -0,1100011 2

    2 6
    ; 6 10
    = (6 + 200)
    8
    = 206 8
    = 10000110 2
    При выполнении арифметических операций над числами, представленными в формате с плавающей запятой, надо отдельно выполнять их для порядков и мантисс. При алгебраическом сложении чисел надо сначала уравнять порядки слагаемых. При умножении порядки надо складывать, а мантиссы перемножать. При делении из порядка делимого вычитают порядок делителя, а над мантиссами совершают обычную операцию деления. После выполнения операций необходимо провести нормализацию результата, если это необходимо, что приводит к изменению порядков, так как каждый сдвиг на один разряд влево соответствует уменьшению порядка на единицу, а сдвиг вправо - увеличению его на единицу. Введение термина «плавающая запятая» как раз и объясняется тем, что двоичный порядок, определяющий фактическое положение запятой в изображении числа, корректируется после выполнения каждой арифметической операции, т.е. запятая в изображении числа плавает
    (изменятся ее положение) по мере изменения данной величины. А в изображении чисел с фиксированной запятой - запятая жестко зафиксирована в определенном месте.
    Арифметические операции с числами в форме плавающей запятой намного сложнее таких же операций для чисел с фиксированной запятой. Но зато плавающая запятая позволяет производить операции масштабирования автоматически в самой машине и избавляет от накопления абсолютной погрешности при вычислениях (хотя не избавляет от накопления относительной погрешности).

    115
    1   ...   9   10   11   12   13   14   15   16   ...   28


    написать администратору сайта