Форма представления данных в компьютере
снова программным путем преобразуется в последовательность символов. В памяти компьютера число хранится в виде двоичного представления.
Целые числа, в зависимости от типа данных, хранятся в памяти компьютера, занимая один, два, четыре и более байта. Каждый бит в байте — это один двоичный разряд. В случае, когда число должно иметь знак, один из разрядов используется для хранения знака. В табл. 11.1 показаны варианты целочисленных представлений с разным числом байтов.
Таблица 11. | 1. Представление целых чисел | |
Количество байтов | Знак | Диапазон |
Без знака | 0... 255 | |
Со знаком | -128 ...127 | |
Без знака | 0... 65535 | |
Со знаком | -32768... 32767 | |
Без знака | 0... 4294967295 | |
Со знаком | -2147483648 ...2147483647 | |
Без знака | 0... 18446744065119617025 | |
Со знаком | -9223372032559808513... 9223372032559808512 |
Как видите, даже 32-разрядного целочисленного представления, как со знаком, так и без, вполне достаточно для решения большинства задач.
Теоретически в памяти компьютера представление отрицательного целого числа может храниться в прямом, обратном или дополнительном коде. Предположим, нам надо представить в двоичном виде целое число 7. Без знака оно поместится в 8-разрядную ячейку следующим образом:
Если это десятичное число -7 (минус семь), то его прямое представление будет выглядеть так:
То есть старший бит призван показать, что это число со знаком «минус».
Однако на практике отрицательные числа не хранятся в виде прямого кода, а всегда приводятся к дополнительному коду. Этот код получается из прямого следующим образом: все разряды, кроме знакового, инвертируются (то есть вместо единиц подставляются 0, вместо нулей — единицы). Так число превращается в обратный код. Затем к результату прибавляется единица, и код становится дополнительным. Вот так будет выглядеть дополнительный код для числа -7:
Глава 11. Представление данных в компьютере
Дополнительный код используется для уменьшения количества циклов, за которые процессор выполняет арифметические операции над этими числами, поскольку позволяет заменить операцию вычитания операцией сложения.
Действительные числа состоят из двух частей: мантиссы и порядка. Мантисса — это целое число, содержащее только значащие цифры исходного числа, а порядок — это позиция запятой, разделяющей целую и дробную части числа. Например, если в памяти надо сохранить число 00313,560, то записаны будут два целых числа: 31356 и 3.
При хранении действительных чисел возникает проблема: некоторые действия над числами приводят к потере точности.
Пример, При делении 1 на 3 результатом является бесконечная иррациональная дробь: 0,3333... Поскольку место в памяти, отведенное под запись этого числа, не бесконечно, то в определенном месте повторение троек придется остановить и записать в память округленное число. Это, в свою очередь, значит, что при умножении такой дроби на три уже не получится результат, равный единице, то есть происходит потеря точности.
Символьные данные
Символьные данные, которые несут в себе текстовую информацию, попадают в компьютер наиболее простым из всех известных способов: после нажатия клавиши на клавиатуре генерируется один байт данных, который записывается в память компьютера. Каждой клавише компьютера соответствует одно определенное сочетание битов в байте. Поскольку битов в байте 8, то общее количество сочетаний, которое может быть получено в результате различных комбинаций нулей и единиц внутри байта, равно 256 (28). Например, 10 нажатий клавиш создает в памяти компьютера последовательность из 10 заполненных байтов. Таков процесс поступления в компьютер и хранения в компьютере простого текста.
Любая из комбинаций битов в байте может рассматриваться как число, записанное в двоичном коде. Соответствие числа, которое при нажатии клавиши записывается в память компьютера, и символа, который появляется на экране при воспроизведении данного числа в символьном виде, называется кодовой таблицей. По мере развития компьютерной техники потребность во все более полном отображении символьной (текстовой) информации возрастала. Вначале казалось, что для кодирования символов при помощи чисел с избытком хватит 127 байт. Первое по порядку 31 десятичное число было отдано под служебные символы (перевод строки, перевод каретки, звонок, пустой символ) (табл. 11.2). Следующие по порядку числа (от 32 до 127) кодировали символы алфавита (табл. 11.3).
Этой таблицы символов вполне хватило для ввода символьной информации на английском языке, и она стала стандартом ASCII (American Standard Code for Information Interchange — американский стандартный код для обмена информацией).
11.1. Форма представления данных в компьютере | ||||
Таблица 11.2.Коды управляющих символов (0-31) | ||||
Код | Обозначение | Клавиша | Значение | Отображаемый символ |
nul | Л@ | Нуль | ||
Soh | ЛА | Начало заголовка | О | |
Stx | ЛВ | Начало текста | Ф | |
Etx | лс | Конец текста | ||
Eot | AD | Конец передачи | ♦ | |
Enq | ЛЕ | Запрос | * | |
Ack | лр | Подтверждение | ||
Bel | AG | Сигнал (звонок) | • | |
Bs | ЛН | Забой (шаг назад) | а | |
Ht | Л1 | Горизонтальная табуляция | о | |
Lf | AJ | Перевод строки | ■ | |
Vt | ЛК | Вертикальная табуляция | с? | |
Ff | AL | Новая страница | ||
Cr | ЛМ | Возврат каретки | S | |
So | Выключить сдвиг | J3 | ||
Si | ло | Включить сдвиг | # | |
Die | лр | Ключ связи данных | ||
del | AQ | Управление устройством 1 | < | |
dc2 | AR | Управление устройством 2 | t | |
dc3 | AS | Управление устройством 3 | II | |
dc4 | Ay | Управление устройством 4 | ||
nak | ли | Отрицательное подтверждение | § | |
syn | AV | Синхронизация | — | |
etb | AW | Конец передаваемого блока | I | |
can | лх | Отказ | т | |
em | Ay | Конец среды | ||
sub | AZ | Замена | ||
esc | л[ | Ключ | ||
fs | л\ | Разделитель файлов | |_ | |
gs | л] | Разделитель группы | ||
rs | лл | Разделитель записей | А | |
us | Разделитель модулей | ▼ |
Глава 11. Представление данных в компьютере | |||||||
Таблица 11.3.Символы с кодами (0-31) | |||||||
Код | Символ | Код | Символ | Код | Символ | Код | Символ |
пробел | Р | Н | |||||
! | Q | I | |||||
« | R | J | |||||
# | ; | S | К | ||||
$ | < | т | L | ||||
% | = | и | m | ||||
& | > | V | ПО | п | |||
• | ? | W | о | ||||
( | @ | X | Р | ||||
) | А | Y | q | ||||
* | В | Z | г | ||||
+ | С | [ | S | ||||
D | \ | t | |||||
- | Е | ] | U | ||||
F | Л | V | |||||
/ | G | W | |||||
Н | X | ||||||
I | А | У | |||||
J | b | Z | |||||
75 - | К | с | { | ||||
7fr | L | d | |||||
М | е | } | |||||
N | f | - | |||||
О | g | del |
Для кодирования символов, отличных от символов английского алфавита, была использована вторая часть из 256 комбинаций, числа от 128 до 256. Эта часть получила название расширенной таблицы ASCII и может содержать в себе символы того или иного национального алфавита. При этом если первая часть таблицы ASCII сформирована один раз и не меняется, то вторая ее часть изменяется в зависимости от того, в какой операционной системе вы работаете. Буквы алфавита остаются теми же самыми, а связанные с ними числа меняются. Так, только для русского языка появились кодировки СР-866 (MS-DOS), CP-1251 (Windows), KOI8-R (UNIX и Linux). Именно наличие нескольких кодовых таблиц для одного и того же языка является причиной появления на интернет-страницах потоков странных иероглифов вместо обычного текста: программа просмотра Интернета не всегда способна определить, какую кодовую таблицу выбрать.