- Об информации и данных
- Измерение информации
- Символ, алфавит и сообщение
- Количество информации (формула Хартли)
Информация (англ. information) - это сведения (знания) о некотором объекте, которые не зависят от формы их представления. Одна и та же информация может быть представлена текстом, голосом, графически и другими способами.
Информация отвечает на вопросы: “Чем является рассматриваемый объект? Какие он имеет свойства?”.
Данные (англ. data) - это форма представления информации в цифровом виде.
Фактически, данные представляют собой последовательность символов, а каждый символ имеет цифровое представление в виде последовательности нулей и единиц, которая задаётся кодировкой символа.
Над данными можно производить операции на ЭВМ, в том числе хранить, считывать, изменять, передавать, анализировать, шифровать и многие другие.
Информация - это смысл, который содержится в данных. По сути говоря, информация является абстракцией, а данные являются её реализацией, хотя достаточно часто понятия “данные” и “информация” используют как синонимы.
Битом (англ. binary digit, bit) или двоичным разрядом называют минимальную, неделимую более единицу измерения информации.
Один бит может хранить в себе одно из двух возможных логических значений. Чаще всего в качестве значений используются 1
(единица) и 0
(ноль) из двоичной системы счисления, но так же допустимы значения: истина
и ложь
, да
и нет
, включено
и выключено
и другие.
Двоичной строкой (англ. bit string), двоичной последовательностью называют упорядоченную последовательность бит (двоичных разрядов).
Длиной двоичной строки называют количество бит этой строки.
Машинным словом или просто словом (англ. word) называют небольшую группу бит, которая может единовременно обрабатываться процессором компьютера (CPU).
Длиной слова (англ. word length) называют количество бит в этом слове.
Длина слова фиксирована и определяется архитектурой компьютера. Например, слово может состоять из 8
, 16
и 32
бит в рвзличных архитектурах.
Для удобства часто вводятся вспомогательные единицы измерения, которые напрямую зависят от длины слова.
Слово (англ. word) | Пол слова (англ. halfword) | Два слова (англ. doubleword) | Четыре слова (англ. quadword) |
---|---|---|---|
8 бит |
4 бит |
16 бит |
32 бит |
16 бит |
8 бит |
32 бит |
64 бит |
32 бит |
16 бит |
64 бит |
128 бит |
Октетом (англ. octet) называют последовательность из 8 бит. Например, октетом является последовательность 10111001
.
Понятие “октет” чаще всего встречается при изучении компьютерных сетей.
Байтом (англ. byte) называют минимально адресуемую единицу памяти.
В наши дни байт почти всегда содержит 8 бит
(остальные размеры устарели), поэтому понятие “байт” часто используют как синоним понятию “октет”.
Далее всегда будем использовать понятие “байт”.
Всего существует 2^8 = 256
комбинаций битов в одном байте, что несложно доказывается комбинаторно (доказательство ниже).
00000000
00000001
00000010
...
11111101
11111110
11111111
Байт можно рассматривать как упорядоченный набор с повторениями длины 8
, состоящий из элементов множества A = { 0, 1 }
. Мощность множества A
равна 2
. Тогда число всевозможных наборов соответствует числу размещений с повторениями: A(8, 2) = 2^8 = 256
.
Существует две системы измерения информации в битах (байтах): десятичная (англ. decimal) и двоичная, бинарная (англ. binary).
Десятичная система измерения использует десятичные префиксы (англ. decimal prefixes, SI prefixes), степени десятки. Например, kilo
- это 10^3
.
Название | Обозначение | Значение |
---|---|---|
bit | b | 1 b |
byte | B | 8 b = 1 B |
kilobyte | KB | 10^3 B = 1000 B |
megabyte | MB | 10^6 B = 1000 KB |
gigabyte | GB | 10^9 B = 1000 MB |
terabyte | TB | 10^12 B = 1000 GB |
petabyte | PB | 10^15 B = 1000 TB |
Двоичная система измерения использует двоичные префиксы (англ. binary prefixes, IEC prefixes), степени двойки. Например, kibi
(kilo binary
) - это 2^10
.
Название | Обозначение | Значение |
---|---|---|
bit | b | 1 b |
byte | B | 8 b = 1 B |
kibibyte | KiB | 2^10 B = 1024 B |
mebibyte | MiB | 2^20 B = 1024 KiB |
gibibyte | GiB | 2^30 B = 1024 MiB |
tebibyte | TiB | 2^40 B = 1024 GiB |
pebibyte | PiB | 2^50 B = 1024 TiB |
Можно составить аналогичные таблицы, используя биты вместо байт (kilobit
, megabit
и так далее).
Большинство оборудования в наши дни использует десятичную систему измерения информации.
При измерении оперативной памяти (RAM) всегда используется бинарная система измерения информации, но при этом названия обычно берутся из десятичной системы измерения.
Таким образом, при измерении оперативной памяти: 1 GB = 1024 MB = 2^10 B
.
Символом (англ. character) называют условный знак, которым обозначают одно или несколько понятий.
Например, символом “+”
обозначают начало номера телефона и оператор сложения, символ “z”
представляет собой определённую букву английского алфавита с её уникальным звучанием, а символ “7”
представляет собой определённую арабскую цифру.
Рекомендуется прочитать: Множество, Мощность множества, Набор элементов.
Напомним, что множество - это неупорядоченный набор уникальных элементов.
Алфавитом (англ. alphabet) называют конечное непустое множество символов.
Пример алфавита A
, каждый символ которого обозначает арифметическую операцию: { “+”, “-”, “•”, “÷” }
.
Мощностью |A| алфавита A
называют количество символов алфавита.
Например, алфавит A
из примера выше имеет мощность |A| = 4
.
Одним из самых распространённых способов передачи информации является сообщение.
Сообщением (англ. message) называют упорядоченный набор символов (элементов) с повторениями, составленный из символов некоторого алфавита A
.
Под определение выше также подходят понятия “текст” и “строка”.
Примеры сообщений, составленных из символов алфавита A = { a, e, p, r }
: pear
, are
, rap
, prrr
.
Длиной сообщения называют количество символов этого сообщения.
Число сообщений длины k
из символов алфавита мощности n
соответствует числу размещений с повторениями из n
по k
, а именно A(n, k) = n^k
.
Например, число сообщений длины k = 3
из символов алфавита мощности n = 4
равно 4^3 = 64
.
Рекомендуется прочитать: Логарифм.
Пусть имеется некоторый алфавит A
мощности n
, символы которого используются при составлении сообщений.
Формулой Хартли называют формулу, по которой вычисляется количество информации I
в некотором сообщении длины k
, составленном из символов алфавита A
мощности n
:
I = k • log2(n)
.
Тогда количество информации i
в одном символе алфавита A
вычисляется по формуле:
i = I ÷ k = log2(n)
.
В качестве единиц измерения для I
и i
используются биты.
Из последней формулы и свойств логарифма следует, что мощность алфавита A
:
n = 2^i
.
Поскольку бит является минимальной (неделимой) величиной, количество информации округляется до целого числа. Причём, происходит округление вверх (к большему целому, математическое округление), чтобы не было потерь информации:
i = ⌈ log2(n) ⌉
, I = k • i
.
Например, в английским языке 26
букв, то есть 52
символа, если учитывать и строчные, и прописные буквы. Возьмём английский алфавит в качестве алфавита A
, тогда |A| = n = 52
и количество информации в одном символе алфавита A
равно i = ⌈ log2(52) ⌉ = log2(64) = 6
бит. В таком случае, любое сообщение длины k = 7
, составленное из символов алфавита A
, займёт I = k • i = 42
бит.
- Кодирование и декодирование
- Набор символов и кодировка
- Код
- Разновидности кодировок
- О кодировке ASCII
- О стандарте Unicode
Кодированием (англ. encoding) называют процесс преобразования последовательности символов некоторого алфавита A
в последовательность символов другого алфавита B
.
Декодированием (англ. decoding) называют процесс обратного преобразования из последовательности символов алфавита B
в последовательность символов алфавита A
.
Фактически, можно рассматривать кодирование как преобразование информации в данные, а декодирование как преобразование данных в информацию.
Набором символов (англ. character set, charset) называют некоторый алфавит, символы которого могут быть использованы во многих других алфавитах.
Например, некоторый набор символов может содержать символы латинского алфавита { ..., a, b, ..., z, ... }
, а многие из этих символов используются в английском, немецком, французском, итальянском и других алфавитах.
Кодировкой символов (англ. character encoding) или просто кодировкой (англ. encoding) называют закодированный набор символов, то есть такую таблицу, в которой каждому символу из набора символов ставится в соответствие последовательность из одного или нескольких символов некоторого другого алфавита.
Обычно в кодировке каждому символу из набора символов ставится в соответствие некоторое целое число аналогично тому, как каждому элементу массива (коллекции) ставится в соответствие его индекс. Это целое число обычно представляют в одной из трёх форм:
- В десятичной системе счисления (10 с/с), которая привычна человеку.
- В двоичной системе счисления (2 с/с), чтобы показать, как компьютер видит данное число.
- В шестнадцатиричной системе счисления (16 с/с) для краткости записи длинных чисел.
Например, в некотором закодированном наборе символов A
символу '#'
может соответствовать десятичное число 124
(в 2 с/с - 01111100
, в 16 с/с - 7c
), а символу '$'
- десятичное число 255
(в 2 с/с - 11111111
, в 16 с/с - ff
).
Одному набору символов может соответствовать несколько кодировок.
Кодом (англ. code) называют некоторый алгоритм (последовательность действий, набор инструкций), который преобразует символ одного алфавита A
в определённую последовательность символов другого алфавита B
.
Алфавит A
называют исходным алфавитом (англ. source alphabet), а алфавит B
- целевым алфавитом (англ. target alphabet).
Если целевой алфавит B
содержит лишь два символа (может закодировать лишь два состояния), то код называют двоичным или бинарным кодом (англ. binary code). Чаще всего целевой алфавит бинарного кода состоит из нуля и единицы, то есть B = { 0, 1 }
, что приводит нас к использованию двоичной системы счисления (англ. the binary number system).
Кодом символа будем называть закодированное представление этого символа.
Пусть имеются исходный и целевой алфавиты A
и B
. Пусть также имеются бесконечные множества A*
и B*
, являющиеся множествами всевозможных последовательностей символов алфавитов A
и B
соответствено.
Кодом называют такую функцию (отображение) c: A → B*
, которая преобразует (англ. map) каждый символ алфавита A
в некоторую последовательность символов алфавита B
. Такая последовательность однозначно определяется заданным алгоритмом (набором символов).
Расширением кода c
(англ. extension) называют функцию c*: A* → B*
, которая преобразует любую последовательность символов алфавита A
в определённую последовательность символов алфавита B
.
Пусть имеется исходный алфавит A = { r, s, t }
и целевой алфавит B = { 0, 1, 2, 3, 4, 5, 6, 5, 6, 7, 8, 9 }
.
По определению, кодом является функция c: A → B*
, которая принимает символ алфавита A
и возвращает последовательность символов алфавита B
(десятичное число) по заданному правилу.
Пусть теперь последовательность символов алфавита B
задаётся кодировкой ANSII.
Символ | Десятичный код символа |
---|---|
r | 162 |
s | 163 |
t | 164 |
В таком случае справедливо следующее
с('r') = 162,
c('s') = 163,
c('t') = 164,
что так же можно записать
c = { r ↦ 162, s ↦ 163, t ↦ 164 },
где r, s, t ∈ A
и 162, 163, 163 ∈ B*
.
Рассмотрим теперь расширение кода в виде функции c*: A* → B*
, которая принимает последовательность символов исходного алфавита A
и преобразует её в последовательность символов целевого алфавита B
по тому же правилу, что и код c: A → B*
.
Например, пусть ts, ssr ∈ A*
, тогда
c* = { ts ↦ 164162, ssr ↦ 16316312 },
где 164162, 16316312 ∈ B*
.
Кодировки можно разделить на несколько типов в зависимости от затрачиваемой ими памяти на каждый символ:
- Фиксированный размер для всех символов. Кодировки с фиксированным размером подразделяются на однобайтовые и многобайтовые (обычно, 2-4 байта).
- Динамический размер символа.
Размер представления любого символа в самых первых кодировках не превышал одного байта. Наиболее яркими примерами таких кодировок выступают семибитная кодировка ASCII и восьмибитная (однобайтовая) расширенная кодировка ASCII. Кодировка ASCII является стандартом в языке C и часто встречается при работе с языком C++.
Используя формулу количества информации i
в одном символе алфавита A
мощности n
: i = log2(n)
, приходим к тому, что n = 2^i
, откуда следует, что семибитная кодировка позволяет закодировать лишь набор из 2^7 = 128
и менее символов, а однобайтовая кодировка - набор из 2^8 = 256
и менее символов.
Поскольку минимально адресуемая единица памяти на большинстве современных компьютеров равна одному байту, для двоичного представления символов ASCII чаще всего используют 8-битные последовательности вместо 7-битных. Как следствие, кодировку ASCII так же можно считать однобайтовой.
Однобайтовая кодировка проста в реализации, закодированный с её помощью текст имеет наименьший размер и этот размер можно довольно просто рассчитать (1 символ = 1 байт
).
С другой стороны, однобайтовая кодировка сильно ограничена, поскольку такая кодировка может вместить очень мало языков.
Когда это может быть важно? Например, в тексте с цитатами из оригинальных источников на иностранных языках. Если кодировка не поддерживает некоторый язык, определённые фрагменты текста будут представлять собой нечто вроде "цуаыв"
, что свидетельствует о неправильном декодировании и что невозможно разобрать. Можно, конечно, переключить кодировку, но тогда уже другая часть текста станет неразборчивой. Более того, в однобайтовую кодировку не вмещаются даже все символы китайского языка.
Как итог, однобайтовая кодировка идеально подходит для небольшой локальной системы, в которой представление всей информации не выходит за пределы ограниченного множества символов. Когда две и более такие системы с различными кодировками начинают взаимодействовать друг с другом, что и подразумевает под собой интернет, появляются проблемы.
Очевидным решением проблемы стало расширение кодировки ASCII. Так появилась расширенная кодировка ASCII (англ. Extended ASCII), которая может закодировать до 256
символов, но и её вскоре оказалось не достаточно из-за быстрого развития компьютерных сетей. Это привело к созданию стандарта Unicode, который поддерживает почти все существующие в мире символы.
Кодировка ASCII (англ. American Standard Code for Information Interchange) была разработана для управления средствами обмена информацией (например, телетайп) ещё до появления компьютера.
Большинство современных кодировок обратно совместимы с кодировкой ASCII.
Кодировка ASCII содержит:
- Управляющие символы (англ. Control characters). Например,
Backspace
,Space
,Delete
,\n
. - Печатные символы (англ. Printable characters), включающие в себя строчные и прописные буквы латинского алфавита, цифры, знаки препинания и некоторые другие наиболее распространённые символы (
#
,&
,@
,$
,=
и так далее).
Каждому символу кодировки ASCII ставится в соответствие целое число (код символа) от 0
до 127
, которое может быть представлено 7-битной строкой.
Тем не менее, поскольку минимально адресуемая единица памяти на большинстве современных компьютеров равна одному байту, для двоичного представления символов ASCII чаще всего используют 8-битные последовательности вместо 7-битных. Для этого в начало двоичной последовательности добавляется один нулевой бит. Например, вместо 1000110
записывают 01000110
Ниже выборочно представлены символы и их коды в кодировке ASCII:
Код символа | Двоичный код символа | Символ |
---|---|---|
0 | 00000000 | "\0" (Null) |
8 | 00001000 | "\b" (Backspace, BS) |
9 | 00001001 | "\t" (Horizontal Tab, HT) |
10 | 00001010 | "\n" (Line Feed, LF) |
13 | 00001101 | "\r" (Carriage Return, CR) |
40 | 00100000 | Space |
49 | 00110001 | "1" |
50 | 00110010 | "2" |
57 | 00111001 | "9" |
65 | 01000001 | "A" |
66 | 01000010 | "B" |
90 | 01011010 | "Z" |
97 | 01100001 | "a" |
98 | 01100010 | "b" |
122 | 01111010 | "z" |
127 | 01111111 | Delete |
В наши дни самым широко используемым набором символов является универсальный набор символов (англ. Universal character set, UCS), являющийся частью стандарта Unicode. Этот набор символов содержит почти все зарегистрированные символы мира, в том числе символы всех существующих разговорных языков.
Благодаря такой широкой поддержке символов, в одном файле с кодировкой стандарта Unicode может использоваться сколько угодно языков. В случае же использования однобайтовой кодировки, пришлось бы переключать кодовые страницы (кодировки), чтобы распознать (декодировать) отдельные фрагменты текста.
Стандарт Unicode предоставляет целое семейство кодировок UTF (англ. Unicode transformation format), каждая из которых имеет свой алгоритм кодирования символов универсального набора.
Символы Unicode представляются целыми неотрицательными числами, которые обычно записываются в шестнадцатиричной системе счисления (16 с/с) для компактности.
*Основными
Метаданными (англ. metadata) называют данные, которые несут в себе информацию о других данных. Иначе говоря, метаданные - это “данные о данных”.
Например, текстовый файл может иметь следующие метаданные:
- имя пользователя, создавшего файл,
- дата создания файла,
- дата последнего изменения файла,
- размер файла (например,
73 KB
), - полная расшифровка формата файла (например,
.pdf
- Portable Document Format), - количество символов (строк) в файле*,
- кодировка файла (например,
UTF-8
), - возможность чтения файла и записи в файл.
Например, реляционная база данных хранит информацию (метаданные) о том, какие таблицы в ней имеются, какой размер они занимают и сколько строк содержится в каждой из них.
;