Представление информации в памяти компьютере. Представление информации в компьютере. Схема работы процессора с памятью

З наете ли вы, что такое оперативная память? Конечно, знаете. Это такое устройство, от которого зависит скорость работы компьютера. В общем, так оно и есть, только выглядит такое определение немного дилетантски. Но что в действительности представляет собой оперативная память? Как она устроена, как работает и чем один вид памяти отличается от другого?

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

Но если ОЗУ это одна часть компьютерной памяти, тогда что представляет собой её другая часть? Носителем этой части памяти является жесткий диск. В отличие от ОЗУ, он может хранить информацию, не будучи подключён к источнику питания. Жесткие диски, флешки и CD-диски - все эти устройства именуются ПЗУ, что расшифровывается как постоянное запоминающее устройство. Как и ОЗУ, ПЗУ хранят данные в виде нулей и единиц.

Для чего нужна ОЗУ

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

Физическое устройство оперативной памяти таково, что чтение/запись в ней производится намного быстрее . Если бы вместо ОЗУ у вас было ПЗУ, компьютер бы работал очень медленно.

Физическое устройство ОЗУ

Физически ОЗУ представляет съёмную плату (модуль) с располагающимися на ней микросхемами памяти. В основе микросхемы лежит конденсатор - устройство, известное уже больше сотни лет.

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

Как в ОЗУ записывается и читается информация

Понять, как в ОЗУ происходит запись и считывание данных будет проще, если представить её в виде обычной таблицы. Чтобы считать данные из ячейки, на горизонтальную строку выдаётся сигнал выбора адреса строки (RAS) . После того как он подготовит все конденсаторы выбранной строки к чтению, по вертикальной колонке подаётся сигнал выбора адреса столбца (CAS) , что позволяет считать данные с конкретной ячейки матрицы.

Характеристика, определяющая количество информации, которое может быть записано или прочитано за одну операцию чтения/записи, именуется разрядностью микросхемы или по-другому шириной шины данных. Как нам уже известно, перед тем как быть переданной на шину микросхемы, а затем в центральный процессор, информация сначала попадает в выходной буфер. С ядром он связывается внутренним каналом с пропускной способностью равной ширине шины данных. Другой важной характеристикой ОЗУ является частота шины памяти. Что это такое? Это периодичность, с которой происходит считывание информации, а она совсем не обязательно должна совпадать с частотой подающегося на матрицу памяти сигнала, что мы и увидим на примере памяти DDR.

В современных компьютерах используется так называемая синхронная динамическая оперативная память - SDRAM . Для передачи данных в ней используется особый синхросигнал. При его подаче на микросхему происходит синхронное считывание информации и передача её в выходной буфер.

Представим, что у нас есть микросхема памяти с шириной шины данных 8 бит , на которую с частотой 100 МГц подаётся синхросигнал. В результате за одну транзакцию в выходной буфер по 8-битовому каналу попадает ровно 8 бит или 1 байт информации. Точно такой же синхросигнал приходит на выходной буфер, но на этот раз информация попадает на шину микросхемы памяти. Умножив частоту синхросигнала на ширину шины данных, мы получим ещё один важный параметр - пропускную способность памяти .

8 бит * 100 МГц = 100 Мб/с

Память DDR

Это был простейший пример работы SDR - памяти с однократной скоростью передачи данных. Этот тип памяти сейчас практически не используется, сегодня его место занимает DDR - память с удвоенной скоростью передачи данных. Разница между SDR и DDR заключается в том, что данные с выходного буфера такой ОЗУ читаются не только при поступлении синхросигнала, но и при его исчезновении. Также при подаче синхросигнала в выходной буфер с ядра памяти информация попадает не по одному каналу, а по двум, причём ширина шины данных и сама частота синхросигнала остаются прежними.

Для памяти DDR принято различать два типа частоты. Частота, с которой на модуль памяти подаётся синхросигнал, именуется базовой, а частота, с которой с выходного буфера считывается информация - эффективной. Рассчитывается она по следующей формуле:

эффективная частота = 2 * базовая частота

В нашем примере с микросхемой 8 бит и частотой 100 МГц это будет выглядеть следующим образом.

8 бит * (2 * 100 МГц) = 200 Мб/с

Чем отличаются DDR от DDR2, DDR3 и DDR4

Количеством связывающих ядро с выходным буфером каналов, эффективной частотой, а значит и пропускной способностью памяти. Что касается ширины шины данных (разрядности) , то в большинстве современных модулей памяти она составляет 8 байт (64 бит) . Допустим, что у нас есть модуль памяти стандарта DDR2-800 . Как рассчитать его пропускную способность? Очень просто. Что такое 800 ? Это эффективная частота памяти в мегагерцах. Умножаем её на 8 байт и получаем 6400 Мб/с .

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

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

Количество двоичных разрядов, необходимых для записи символа или точки картинки зависит от числа вариантов для объекта кодирования. Наибольшее число, которое в двоичной системе счисления можно записать с помощью N цифр, состоит из N единиц. Это число равно 1+2+4+…+2 N -1 = 2 N -1 . Например, с помощью восьми двоичных цифр можно различать 2 8 = 256 символов текста. Восемь двоичных разрядов (битов) составляют один байт.

Это рассуждение настолько важно для всей идеологии хранения информации в двоичном коде, что в информатике принято измерять объем не в десятичной системе счисления, а в специальных единицах измерения, использующих степени двойки. Используя то обстоятельство, что 2 10 = 1024 не очень отличается от 10 3 = 1000, принято 1024 байт называть килобайтом (1Кб). Аналогично мегабайт – это 1024 килобайта (1Мб), а гигабайт – 1024 мегабайта (1Гб). Количество информации в современном мире столь велико, что приходится вводить еще одну единицу – терабайт, равную 1024 гигабайта (1Тб). Если не нужна особая точность, то можно считать, что 1 тб = 10 3 гб = 10 6 мб = 10 9 кб = 10 12 байт.

То устройство компьютера, в котором хранится информация, называется оперативным запоминающим устройством (ОЗУ) или оперативной памятью. С логической точки зрения ОЗУ представляет собой линейную последовательность байтов. Длина этой последовательности составляет в современных персональных компьютерах несколько гигабайт (на 2011г.). Еще больше (десятки и сотни гигабайт) оперативная память суперкомпьютеров. В этой памяти хранятся данные, а также программы, разбитые на машинные команды. Конкретное выделение памяти под числа и команды производится операционной системой компьютера в процессе его работы.

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

Количество байтов, выделяемых для хранения одного числа, варьируется от одного до 10 байтов и зависит от типа числа. Различают два основных формата представления числа в памяти компьютера: с фиксированной и плавающей запятой. Числа с фиксированной запятой записываются в их двоичном представлении: 1 бит = 1 двоичный разряд. Один бит выделяется для представления знака числа (0 – плюс, 1 – минус). Число с плавающей запятой должно быть представлено в так называемой нормализованной (или экспоненциальной) форме: X=M∙10 n , где число М (называемое мантиссой) заключено от 1 до 10, число n (называемое порядком) - целое. В памяти записывается отдельно мантисса и отдельно порядок. Следует отметить, что поддерживаются также смешанные форматы, когда десятичные цифры числа записываются в двоичной системе.

Форматы одного класса могут различаться количественными параметрами, от которых зависит диапазон чисел, которые могут быть представлены в данном формате. Например, если переменная – число месяца, то для ее хранения достаточно одного байта. Для хранения целых величин, изменяющихся в диапазоне от -2 15 = –32768 до 2 15 -1 = 32767, в формате с фиксированной запятой достаточно двух байтов. Если целое число не вмещается в этот диапазон, то для его хранения выделяется четыре байта (диапазон от –2 31 до 2 31 -1). Представление с плавающей запятой используется, как правило, в научно-технических задачах, когда переменные могут изменяться в большом диапазоне значений или нужна очень большая точность.

Для кодирования текстовой информации используются таблицы кодирования символов. В настоящее время существует стандарт ASCII (American Standard Code for Informational Interchange), содержащий набор и номера 128 основных символов (коды от 0 до 127) и набор и номера 128 расширенных символов (коды от 128 до 255). Код символа ASCII занимает один байт. Поскольку в стандарт ASCII не входят символы национальных алфавитов (которых значительно больше, чем 128), в каждой стране 128 кодов расширенных символов (от 128 до 255) заменяются символами национального алфавита. Для того, чтобы корректно кодировать и изображать символы при печати и выводе на экран, для каждого языка нужна специальная программа – языковый драйвер.

В стандарте Unicode каждый символ занимает два байта. Благодаря этому в стандарте Unicode можно закодировать 2 16 = 65536 различных символов, что позволяет унифицировать символы разных языков, включая иероглифы, и большое количество специальных символов и знаков.

Логическая величина – это величина, которая может принимать всего два значения – true и false («истина» и «ложь»). Для хранения значения логической переменной достаточно одного бита. Обычно значение «ноль» бита памяти ассоциируется с истиной, значение «единица» – с ложью.

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

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

Нумерация бит в двухбайтовом машинном слове

Бит №15 считается старшим,
бит №0 – младшим.
Длина машинного слова зависит от разрядности
процессора и может быть равной 16, 32 битам и
т.д.

Символы текста (буквы, цифры, знаки) кодируются комбинациями
из нулей и единиц. Каждому символу, который можно
использовать в тексте, поставлен в соответствие двоичный код.
Используя код из 1 бита, можно закодировать всего 2 разных
символа.
Двухбитовых комбинаций может быть 4 (00; 01, 10, 11) т. е. 22.
Трехбитовых комбинаций – 8 (23).
Для кодирования 32 (25) различных символов достаточно 5 бит.
Этот код использовался в работе телеграфа в 20-е годы ХХ века,
вместо знаков препинания ставились ТЧК и ЗПТ.
Используя 7 бит, можно закодировать 128 символов (двоичный
семибитовый код обмена информацией КОИ-7).

Представление текстовой информации в памяти компьютера

Оптимальное количество символов, которые
используются при наборе различных текстов,
примерно 200 (буквы латинские и русские,
заглавные и строчные, знаки препинания,
цифры, математические знаки, элементы
псевдографики).
В 2-ой с.с.столько символов может быть
закодировано последовательностью из 8 бит
(28=256), т.е. 1 байтом.

Представление текстовой информации в памяти компьютера

Самая известная 8-битная кодировка – это таблица
ASCII (American Standard Coding for Information
Interchange - стандартный американский код для
обмена информацией).
Она состоит из 2-х частей: основная, одинаковая во всем
мире (десятичные коды 0-127 – это управляющие
коды, латинские буквы, знаки препинания, цифры) и
расширенная (коды 128-255 – это буквы
национального алфавита, символы псевдографики).
Первые 32 кода – это управляющие символы: возврат
каретки, табуляция, отмена операции и т.п.

Представление текстовой информации в памяти компьютера

Помимо восьмиразрядной системы кодирования символьной
(текстовой) информации разработана система
шестнадцатиразрядного кодирования символов, которая
получила название универсальной, UNICODE.
Такая система позволяет закодировать 216 = 65 536 различных
символов, в том числе практически все алфавиты языков нашей
планеты.
Расчет объема текстовой информации сводится к вычислению
произведения количества символов в тексте на число разрядов
двоичного кода, необходимого для кодирования одного символа.

Представление чисел в памяти компьютера

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

Представление чисел в памяти компьютера

Формат с фиксированной запятой
Используется для хранения целых чисел
15
14 ……………………………….0
Знак
Цифровые разряды числа
1 бит
15 бит
Старший бит (№15) может считаться знаковым. При
этом если в нем хранится 0, то это +,
если 1, то это – .
Цифровые разряды числа хранятся в дополнительном
коде (ДК).

Представление чисел в памяти компьютера

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

Принцип работы дополнительного кода на примере 10 с.с.

Пусть необходимо вычислить: 8810 – 6410
Такая привычная нам запись чисел - это прямой код (ПК) чисел.
Выполним вычитание через сложение чисел в ДК.
1) Переведем числа в ДК. Для числа 88 ДК совпадает с ПК.
Так для всех чисел, которые больше 0.
Для числа -64 (оно меньше 0) вычтем 64 из минимального
трехразрядного числа (т.к. в числе 64 два разряда, то это 100):
100 – 64 = 36 – это ДК числа 64.
2) Теперь сложим ДК чисел: 88+36 = 124.
Если отбросить старший разряд, то получится 24, что
соответствует результату вычитания.

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

Представление чисел в памяти компьютера
(формат с фиксированной запятой)
Пример 1. Записать число -40(10) в формате компьютера как целое со знаком.
Разрядность формата – 16 бит.
Решение.

40(10) = 101000(2)


0000 0000 0010 1000
3) Получаем ДК, просматривая ПК справа налево
ПК: 0000 0000 0010 1000
ДК: 1111 1111 1101 1000
Это двоичная запись компьютерного представления числа -4010 в формате
компьютера с фиксированной запятой разрядностью 16 бит.
Для более компактной записи используют шестнадцатеричный код: FFD8(16)

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

Пример 2. Записать число 40(10) в формате компьютера как целое со
знаком. Разрядность формата – 16 бит.
Решение.
1) Переводим 40(10) в двоичную систему счисления:
40(10) = 101000(2)
2) Получаем ПК числа в компьютерном формате. Для этого дополняем
двоичную запись числа слева нулями так, чтобы стало 16 разрядов:
0000 0000 0010 1000
Полученный ПК совпадает с ДК, так как число положительное.
Поэтому эта двоичная запись и есть компьютерное представление
числа 4010 в формате компьютера с фиксированной запятой
разрядностью 16 бит.
Для более компактной записи используют шестнадцатеричный код:
0028(16)
Здесь незначащие нули опускать нельзя, так как они хранятся в
памяти компьютера.

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

Другой способ получения ДК – это получить обратный
(инверсный) код (ОК), а затем прибавить к нему 1.
Пример 3. Запишем ДК числа (–38), интерпретируя его
как величину в формате с фиксированной запятой
разрядностью 32 бита:
1) ПК числа 38:
0000 0000 0000 0000 0000 0000 0010 0110;
2) ОК числа -38 (здесь 0 заменён на 1, а 1 на 0):
1111 1111 1111 1111 1111 1111 1101 1001;
3) ДК получается прибавлением к ОК единицы:
1111 1111 1111 1111 1111 1111 1101 1010
или FFFFFFDB(16).

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

Пример 4. Дано число в формате компьютера (16 бит): FFD4(16). Определить
десятичное значение числа.
Решение.
1) Запишем двоичный код числа:
FFD4(16) = 1111 1111 1101 0100(2)
2) Выделим элементы формата:
1 111 1111 1101 0100
знак Цифровые разряды
3) Так как знаковый разряд равен 1 (это –), то цифровые разряды записаны в
ДК. Получим ПК по тому же правилу, по которому мы получали ДК:
ДК: 1111 1111 1101 0100
ПК: 0000 0000 0010 1100
4) Переводим ПК в 10 с.с.: 32+8+4 = 44(10)
5) Вспоминаем, что знак -. Поэтому ответ: -44(10)

Любое действительное число можно записать в стандартном виде
(иногда запись называют научной записью):
M 10p, где 1 M < 10, p - целое.
Например, 120100000 = 1,201 108.
Поскольку каждая позиция десятичного числа отличается от
соседней на степень числа 10, умножение на 10 эквивалентно
сдвигу десятичной запятой на одну позицию вправо.
Аналогично деление на 10 сдвигает десятичную запятую на
позицию влево.
Поэтому пример можно продолжить:
120100000 = 1,201 108 = 0,1201 109 = 12,01 107 .
Получается, что десятичная запятая «плавает» в числе и больше
не помечает абсолютное место между целой и дробной
частями.

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

Рассмотрим запись M 10 p.
Здесь: M – мантисса числа, p - порядок числа.
Чтобы сохранить максимальную точность, в памяти
компьютера мантисса хранится в нормализованном виде.
Это значит, что:
1 M < 2.
Такой способ хранения мантиссы с плавающей точкой
подразумевает, что двоичная запятая находится на
фиксированном месте: двоичная запятая следует после
первой значащей двоичной цифры. Это значит, что в
нормализованной мантиссе целая часть всегда равна 1.
Тогда её значение лежит между единицей и двойкой.

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

Рассмотрим формат действительного числа. Для него может
выделяться 4, 6, 8, 10 и др. байт. ДК не используется.
Место, отводимое для числа с плавающей точкой, делится на
три поля: знак (старший бит), место для хранения порядка
и место для хранения мантиссы. Для формата в 4 байта:
31 30 … … … 23 22…………………….0
Знак Смещенный
порядок
1 бит
8 бит
Мантисса
23 бита

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

Смещенный порядок – это порядок, к которому
добавлена константа (она называется смещение
порядка), соответствующая разрядности формата.
Это позволяет не использовать ДК.
Смещение выбирается так, чтобы минимальному значению
порядка соответствовал ноль. Например, для формата 8 байт
порядок занимает 11 бит и имеет диапазон от 2–1023 до 21023,
поэтому смещение равно 1023(10) = 11 1111 1111(2) = 3FF(16).

Представление чисел в памяти компьютера
(формат с плавающей запятой)
Таблица смещений порядка для форматов с
плавающей запятой
Разрядность
формата, бит
Разрядность
порядка, бит
Смещение порядка
10 с.с.
16 с.с.
32
8
127
7F
64
11
1023
3FF
80
15
16383
3FFF

Представление чисел в памяти компьютера
(формат с плавающей запятой)
Алгоритм получения представления действительного числа в
памяти компьютера:
1) перевести модуль данного числа в двоичную систему
счисления;
2) нормализовать двоичное число, т.е. записать в виде M 2p,
где M - мантисса (ее целая часть равна 1) и p - порядок,
записанный в десятичной системе счисления;
3) прибавить к порядку смещение и перевести смещенный
порядок в двоичную систему счисления;
4) учитывая знак заданного числа (0 - положительное; 1 -
отрицательное), выписать его представление в памяти
компьютера. При этом из мантиссы выбросить целую
часть, т.к. она всегда равна 1.

Представление чисел в памяти компьютера
(формат с плавающей запятой)
Пример 1. Записать число –312,3125(10) в формате
компьютера с плавающей запятой размером 4 байта (32
бита).
Решение.
1) Двоичная запись модуля этого числа: 100111000,0101.
2) Нормализуем число, т.е. переносим запятую так, чтобы
в целой части была одна 1.Имеем:
100111000,0101 = 1,001110000101 28.
3) Получаем смещенный порядок, добавляя к порядку
смещение для 32-х битного формата (12710 или 7F16).
Выполнять действия удобнее в 16-ой с.с.:
810 = 10002 = 816
816 + 7F16 = 8716 = 1000 01112 .

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

4) Выпишем элементы формата:
Знак:
Смещенный порядок:
Мантисса:
1 (т.к. число меньше 0)
1000 01112
0011100001012 (целую часть не берем)
5) «Собираем» элементы формата:
1 10000111 001110000101 - всего 21 разряд, а нужно 32.
6) Добавляем еще 11 нулевых разрядов справа, т.к. это будут
незначащие нули:
1100 0011 1001 1100 0010 1000 0000 00002
Это запись ответа в 2-ой с.с. Для более компактной записи
используем 16-ю с.с.:
C39C2800

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

Пример 2. Задано действительное число C1040000 в
формате компьютера с плавающей запятой размером 4
байта (32 бита). Определить десятичное значение данного
числа.
Решение.
1) Двоичная запись этого числа:
1100 0001 0000 0100 0000 0000 0000 0000
2) Выделяем элементы формата:
Знак:
1 (т.е. число отрицательное)
Смещенный порядок: 1000 0010 или 8216
Мантисса: 000 0100 0000 0000 0000 0000

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

3) Получаем порядок вычитанием из 8216 смещения для
формата в 32 бита:
8216 – 7F16 = 316
4) Получаем мантиссу – целая часть равна 1, а дробную часть
берем из формата, отбрасывая незначащие нули:
1, 00001
5) Записываем двоичное число в нормальной форме:
-1,000012∙23
6) Порядок говорит о том, что запятую надо сдвинуть на 3
разряда вправо:
-1000,012 = - (8+1/4) = -8,2510

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

Особенности формата с плавающей запятой
Если при вычислениях с действительными числами результат выходит
за пределы допустимого диапазона, то выполнение программы
прерывается. Такое происходит, например, при делении на ноль, или
на очень маленькое число, близкое к нулю.
Действительные числа, разрядность мантиссы которых превышает
число разрядов, выделенных под мантиссу в памяти, представляются
в компьютере приближенно (с “обрезанной” мантиссой). Например,
рациональное десятичное число 0,1 в компьютере будет представлено
приближенно (округленно), поскольку в двоичной системе счисления
его мантисса имеет бесконечное число цифр. Следствием такой
приближенности является погрешность машинных вычислений с
вещественными числами.
Вычисления с вещественными числами компьютер выполняет
приближенно. Погрешность таких вычислений называют
погрешностью машинных вычислений.
Множество вещественных чисел, точно представимых в памяти
компьютера в форме с плавающей точкой, является ограниченным и
дискретным. Их количество можно вычислить.

Рассмотрим растровую графику.
Для кодирования любого изображения его разбивают на
точки и цвет каждой точки закодировать.
Например, черно-белую картинку можно закодировать,
используя два бита: 11 - белый цвет, 10 - светлосерый, 01 - темно-серый и 00 - черный цвет.
Для кодировки 256 различных цветов требуется 8 бит.
Для кодирования полноцветных изображений в
современных компьютерах для хранения цвета одной
точки используется 3 байта.

Представление графической информации

Система кодирования цветной графической информации
RGB
(Red, Green, Blue)
Каждый цвет – это комбинация трех цветовых
составляющих: красного, зеленого и синего. Первый байт
определяет интенсивность красной составляющей, второй
- зеленой, третий - синей.
Белый цвет кодируется максимальной интенсивностью всех
трех составляющих (255, 255, 255 или в 2-й с.с. 111111111,
11111111, 11111111). Черный цвет - отсутствие всех
цветовых составляющих - (0,0,0). Красный цвет может
быть темным - (120,0,0) или ярко-красным (255,0,0).
Система RGB обеспечивает однозначное определение 16,5
млн. различных цветов и оттенков (224).

Представление графической информации

Качество графического изображения зависит также от
количества точек (пикселей) на единице площади. Этот
параметр называется разрешением и измеряется в точках
на дюйм - dpi.
Расчет объема графической информации сводится к
вычислению произведения количества точек в
изображении на количество разрядов, необходимых для
кодирования цвета одной точки.
Например, для цветной картинки размером 640 × 480,
составленной из 256 цветов, требуется:
8 640 480 = 23 64 10 6 8 10 = 23 26 2 5 2 3 23
2 5 = 210 5 25 3 5 = 22 75 23 210 бит = 4 75 Кбайт
= 300 Кбайт.

Представление графической информации

Число цветов, воспроизводимых на экране (K), и
число бит, отводимых под каждый пиксель (N),
связаны формулой:
K=2N
Число бит N, отводимых под каждый пиксель
называют битовой глубиной.

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

Представление звуковой информации

Частота дискретизации – это количество
измерений входного сигнала за 1 секунду.
Измеряется в герцах (Гц).
Одно измерение в секунду соответствует частоте
1 Гц.
1000 измерений в секунду соответствует частоте
1 кГц (килогерц).

Представление звуковой информации

Разрядность регистра – это число бит в
регистре аудиоадаптера. Она определяет
точность измерений входного сигнала. Чем
больше разрядность, тем меньше погрешность
каждого отдельного преобразования величины
электрического сигнала в число и обратно.
Если разрядность 8, то при измерении входного
сигнала можно получить 256 различных
значений. Очевидно, чем больше разрядность
аудиоадаптера, тем точнее воспроизводится
звук.

Представление звуковой информации

Пример. Определить размер V в байтах цифрового
аудиофайла, время звучания которого t=10 секунд при
частоте дискретизации ν=22,05 кГц и разрешении i=8
бит. Файл сжатию не подвержен.
Решение.
Формула: V = ν ∙ i ∙ t бит
22050∙10 ∙8 / 8 байт = 220500 байт

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

Если есть сигнал – единичка, если нет – нолик

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

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

Таким образом, с помощью комбинации 0 и 1 компьютер (с первого поколения и по сей день) способен воспринимать любую информацию: тексты, формулы, звуки и графику.

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

Обычная для нас десятичная форма счисления состоит из десяти цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Кстати, числа 10 в этом списке нет: оно состоит из 0 и 1 – чисел, входящих в десятичную систему счисления.

Что такое бит и что такое байт

Один двоичный знак – 0 или 1 – называется бит (англ. bit – сокращение от английских слов binary digit, что означает двоичная цифра). Бит представляет наименьшую единицу информации. Однако компьютер имеет дело не с отдельными битами, а с байтами.

Байт (англ. byte) – число из восьми бит (различные комбинации из восьми нулей и единиц). Байт является единицей измерения информации.

Последовательностью битов можно закодировать текст, изображение, звук или какую-либо другую информацию. Такой метод представления информации называется двоичным кодированием (binary encoding).

О представлении информации в компьютере

Чтобы перевести в цифровую форму музыкальный звук , можно применить такое устройство, как аналого-цифровой преобразователь. Он из входного звукового (аналогового) сигнала на выходе дает последовательность байтов (цифровой сигнал).

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

На самом деле роль преобразователей (аналого-цифрового и цифро-аналогового) выполняют специальные компьютерные программы. Поэтому при использовании компьютера надобности в таких устройствах нет.

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

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

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

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

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

Кодирование информации вокруг нас

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

Не так уж давно мы пользовались телеграфом (эта услуга остается и по сей день). При этом отправляемый текст кодируется в виде последовательностей так называемых «точек» (коротких сигналов) и «тире» (длинных сигналов), отправляется по проводам. На выходе все это декодируется и печатается на ленте.

Многие люди в недавнем прошлом обязаны были знать эту кодировку, называемую иначе «Азбукой Морзе» по имени ее изобретателя.

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

По сравнению с приведенными примерами, кодировка, применяемая для компьютеров, выглядит намного проще, так как в ней используются только «нули» и «единицы».

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

Единицы измерения информации Единица информации называется битом. Термин "бит" предложен как аббревиатура от английского словосочетания "Binary digit", которое переводится как "двоичная цифра". 1 бит информации - количество информации, посредством которого выделяется одно из двух равновероятных состояний объекта. В компьютерной технике бит соответствует физическому состоянию носителя информации: намагничено - не намагничено, есть отверстие - нет отверстия. При этом одно состояние принято обозначать цифрой 0, а другое - цифрой 1. Выбор одного из двух возможных вариантов позволяет также различать логические истину и ложь. Последовательностью битов можно закодировать текст, изображение, звук или какую-либо другую информацию. Такой метод представления информации называется двоичным кодированием (binary encoding).

Единицы измерения информации В информатике часто используется величина, называемая байтом (byte) и равная 8 битам. И если бит позволяет выбрать один вариант из двух возможных, то байт, соответственно, 1 из 256 (28). В большинстве современных ЭВМ при кодировании каждому символу соответствует своя последовательность из восьми нулей и единиц, т. е. байт Наряду с байтами для измерения количества информации используются более крупные единицы: 1 Кбайт (один килобайт) = 210 байт = 1024 байта; 1 Мбайт (один мегабайт) = 210 Кбайт = 1024 Кбайта = 220 байт; 1 Гбайт (один гигабайт) = 210 Мбайт = 1024 Мбайта = 230 байт. 1 Тбайт (один терабайт) = 210 Гбайт = 1024 Гбайт = 240 байт, 1 Пбайт(один петабайт) = 210 Тбайт = 1024 Тбайт = 250 байт.

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

Беззнаковые целые числа Беззнаковые целые числа представляются в машине наиболее просто. Для этого достаточно перевести требуемое число в двоичную форму и дополнить полученный результат слева нулями до стандартной разрядности. Например, восьмиразрядное (1 байт) число 14 будет иметь вид 0000 1110. Это же самое число в 16 - разрядном представлении будет иметь слева еще 8 нулей. Просто определить минимальное и максимальное значение чисел для N-разрядного беззнакового целого: минимальное состоит из одних нулей, а значит, при любом N равняется нулю; максимальное, напротив, образовано одними единицами и, разумеется, для разных N различно. Для вычисления максимально допустимого значения обычно используют формулу: Max = 2 N - 1. Если выполнить следующие операции: 255 + 1 и 0 - 1. Мысленно представим себе, что при осуществлении операции слева существует еще один дополнительный (девятый) разряд. И, отбросив несуществующий дополнительный разряд, получаем несколько странный, но действительно имеющий место на практике результат: 255 + 1 = 0. А 0 -1=255.

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

Целые числа со знаком Для того, чтобы различать положительные и отрицательные числа, в двоичном представлении чисел выделяется знаковый разряд. По традиции для кодирования знака используется самый старший бит, причем нулевое значение в нем соответствует знаку "+", а единичное – минусу. Подчеркнем, что с точки зрения описываемой системы кодирования число ноль является положительным, т. к. все его разряды, включая и знаковый, нулевые. Представление положительных чисел при переходе от беззнаковых чисел к целым со знаком сохраняется, за исключением того, что теперь для собственно числа остается на один разряд меньше. Первое, что приходит в голову, это кодировать отрицательные значения точно так же, как и положительные, только добавлять в старший бит единицу. Подобный способ кодирования называется прямым кодом.

Дополнительный код числа В его основе лежит запись отрицательных чисел в виде 2 N - |m|, где N, как обычно, количество двоичных разрядов, а m – значение числа. Поскольку фактически вместо числа теперь записывается его дополнение до некоторой характерной величины 2 N, то такой код назвали дополнительным. Однако способ расчета, вытекающий непосредственно из определения, не слишком хорош, поскольку требует от конструкции процессора дополнительного разряда. Поэтому для практического получения кода отрицательных чисел используется следующий эквивалентный алгоритм. Для преобразования отрицательного числа в дополнительный код необходимо: Модуль числа перевести в двоичную форму. Проинвертировать каждый разряд получившегося кода, т. е. заменит единицы нулями, а нули – единицами (полученный код называется обратным). К обратному коду прибавить единицу. Пример 1: Перевести число – 8 в двоичный 8 - разрядный код. Возьмем модуль числа (8 10 = 10002) и дополним его до необходимого числа разрядов нулями слева: 0000 1000. Теперь проинвертируем: 1111 0111. Прибавим единицу. Получим окончательный ответ: 11111000 Для проверки правильности перевода можно сложить последнее число с исходным и убедиться в том, что результат будет нулевым (единицей переноса из старшего разряда, как обычно, пренебрегаем). Проведем сопоставление целых чисел без знака и со знаком. Результат сравнения чисел со знаком и без него состоит в том, что общее количество их значений одинаково, но их диапазоны сдвинуты вдоль числовой оси.

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

Представление с плавающей запятой любое число A в системе счисления с основанием Q можно записать в виде: A = (± M) x Q ± P. где M называют мантиссой, а показатель степени P - порядком числа. Например, 0, 03 = 3 х 10 -2 = 30 х 10 -3 = 0, 3 х 10 -1 = 0, 03 х 10 0 =. . . То есть, представление числа с плавающей запятой не является единственным. Поэтому договорились для выделения единственного варианта записи числа считать, что мантисса всегда меньше единицы, а ее первый разряд содержит отличную от нуля цифру – в нашем примере обоим требованиям удовлетворит только число 0, 3 х 10 -1. Описанное представление чисел называется нормализованным и является единственным. Любое число может быть нормализовано. Особо подчеркнем, что требования к нормализации чисел вводятся исходя из соображений обеспечения максимальной точности их представления.

Представление с плавающей запятой Все сказанное о нормализации можно применять и к двоичной системе: A = (± M) x 2 ± P. Например: - 3 10 = - 0, 11 x 210, M = 0, 11 и P = 10. Существенно, что двоичная мантисса всегда начинается с единицы. Поэтому во многих ЭВМ эта единица не записывается в ОЗУ, что позволяет сохранить еще один дополнительный разряд мантиссы (так называемая скрытая единица). Арифметика чисел с плавающей запятой оказывается заметно сложнее, чем с фиксированной. Например, чтобы сложить два числа с плавающей запятой, требуется предварительно привести их к представлению, когда оба порядка равны; такую процедуру принято называть выравниванием порядков. Кроме того, в результате вычислений нормализация часто нарушается, а значит необходимо ее восстанавливать. Тем не менее, вычислительные машины со всем этим великолепно умеют автоматически справляться, и именно такой способ вычислений лежит в основе работы современных компьютеров.

Представление с плавающей запятой при использовании метода представления вещественных чисел с плавающей запятой фактически хранится два числа: мантисса и порядок. Разрядность первой части определяет точность вычислений, а второй – диапазон представления чисел. Для того чтобы сохранить максимальную точность, вычислительные машины почти всегда хранят мантиссу в нормализованном виде, что означает, что мантисса в данном случае есть число, лежащее между 1(10) и 2(10) (1

Вещественные типы данных Тип Диапазон Байты float 3. 4 e– 38 … 3. 4 e+38 4 double 1. 7 e– 308 … 1. 7 e+308 8 long double 3. 4 e– 4932 … 3. 4 e+4932 10 Для типа double: S Смещенный порядок Мантисса 63 62. . 52 51. . 0

Представление чисел с плавающей запятой Для упрощения вычислений и сравнения действительных чисел значение порядка в ЭВМ хранится в виде смещенного числа, т. е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает 11 бит и имеет диапазон от 2 -1023 до 21023, поэтому смещение равно 1023(10) = 11111(2). Наконец, бит с номером 63 указывает на знак числа. Алгоритм для получения представления действительного числа в памяти ЭВМ: Перевести модуль данного числа в двоичную систему счисления; нормализовать двоичное число, т. е. записать в виде M × 2 p, где M - мантисса (ее целая часть равна 1(2)) и p - порядок, записанный в десятичной системе счисления; прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления; учитывая знак заданного числа (0 - положительное; 1 - отрицательное), выписать его представление в памяти ЭВМ.

Пример: Запишем код числа -312, 3125. Двоичная запись модуля этого числа имеет вид 100111000, 0101. Проведем нормализацию, получим 100111000, 0101 = 1, 001110000101 × 28. Находим смещенный порядок: 8 + 1023 = 1031. Далее имеем 1031(10) = 10000000111(2). Окончательно 00111000010100000000000 1 10000000111 0000000000 63 62. . 52 51. . 0 Очевидно, что более компактно полученный код стоит записать следующим образом: C 0738500000(16).

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

Представление текстовой информации Текстовая информация, как и любая другая, хранится в памяти компьютера в двоичном виде. Для этого каждому символу ставится в соответствие некоторое неотрицательное число, называемое кодом символа, и это число записывается в память ЭВМ в двоичном виде. Конкретное соответствие между символами и их кодами называется системой кодировки. В персональных компьютерах обычно используется система кодировки ASCII (American Standard Code for Information Interchange - американский стандартный код для обмена информации). Он введен в 1963 г. и ставит в соответствие каждому символу семиразрядный двоичный код. Легко определить, что в коде ASCII можно представить 128 символов. В системе ASCII закреплены две таблицы кодирования базовая и расширенная. Базовая таблица закрепляет значения кодов от 0 до 127, а расширенная относится к символам с номерами от 128 до 255. Первые 32 кода базовой таблицы, начиная с нулевого, отданы производителям аппаратных средств. В этой области размещаются управляющие коды, которым не соответствуют ни какие символы языков. Начиная с 32 по 127 код размещены коды символов английского алфавита, знаков препинания, арифметических действий и вспомогательных символов.

Универсальная система кодирования текстовых данных Если проанализировать организационные трудности, связанные с созданием единой системы кодирования текстовых данных, то можно прийти к выводу, что они вызваны ограниченным набором кодов (256). В то же время, очевидно, что если, кодировать символы не восьмиразрядными двоичными числами, а числами с большим разрядом то и диапазон возможных значений кодов станет на много больше. Такая система, основанная на 16 -разрядном кодировании символов, получила название универсальной - UNICODE. Шестнадцать разрядов позволяют обеспечить уникальные коды для 216=65 536 различных символов - этого поля вполне достаточно для размещения в одной таблице символов большинства языков планеты.