Перейти к основному содержимому

Кодирование, сжатие и архивация

Всем

Представьте, что компьютер — это курьер, который умеет перевозить только коробки с номерами (нули и единицы). Любое письмо, фото, песня или видео перед отправкой упаковывают по правилам кодирования: «эта последовательность байтов означает букву А», «эти байты — красный пиксель», «эти — громкость звука в одну тысячную секунды». Без общих правил получатель увидит бессмыслицу.

Эта глава — мост к школьной теме «представление информации». Подробная теория — в разделе Данные и информация; здесь — понятные определения, примеры и порядок чтения.

Информация и данные — в чём разница

Информация — сведения, которые имеют смысл для человека: текст песни, смысл SMS, что на фотографии кот.

Данные — то же содержание, но записанное формально, как файл или поток байтов на диске или в сети.

СитуацияДанныеИнформация
Файл report.pdf на дискеНабор байтовОтчёт, который вы читаете
Сообщение «Жду у подъезда» в телефонеБайты в памяти телефонаПонятная фраза на русском
Незнакомый языкТе же байтыБессмысленные символы без знания языка

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

Запомнить
Компьютер оперирует данными. Информация появляется, когда есть правило расшифровки и тот, кто это правило знает.

С чего всё начинается — бит и байт

Бит — минимальная единица: одна ячейка со значением 0 или 1.

Байт8 бит подряд. Один байт может хранить 256 разных комбинаций (от 00000000 до 11111111), поэтому им удобно кодировать один символ в простых таблицах или часть более сложного кода.

Пример. Буква латинская A в старой таблице ASCII — число 65, в двоичном виде в байте: 01000001. Восьми бит хватает, чтобы закодировать 256 разных значений — для латиницы и знаков препинания этого когда-то хватало; для всех языков мира — уже нет.

Размер файла в проводнике («125 КБ», «4,2 МБ») — это сколько байтов внутри. Префиксы: КБ ≈ тысячи байт, МБ ≈ миллионы, ГБ ≈ миллиарды.

Подробнее: Данные и информация — биты и системы счисления.

Кодирование — общая схема

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

Для каждого вида информации свои таблицы и форматы файлов.

Текст — от буквы к байтам

Термины

ТерминПростыми словами
СимволБуква, цифра, знак, эмодзи
Кодовая точка (Unicode)Уникальный номер символа в мировой таблице
Кодировка (UTF-8 и др.)Как номер записать байтами в файле
ASCIIСтарая таблица: 128–256 символов, в основном латиница, 1 байт на символ

Пример — слово «Привет»

  1. В Unicode у каждой буквы есть номер: П → U+041F, р → U+0440, и → U+0438 и т.д.
  2. При сохранении в UTF-8 номера превращаются в цепочку байтов. Кириллица чаще занимает 2 байта на букву (латинская a в UTF-8 — 1 байт).
  3. Если открыть UTF-8 файл программой, которая думает, что это старая кодировка Windows-1251, вместо «Привет» увидите «РџСЂРёРІРµС‚» — те же байты, другая интерпретация.

UTF-8 сегодня — стандарт для веба, многих документов и Linux; он совместим с ASCII для английских букв.

Подробнее: Виды информации — текст.

Числа в компьютере

Целые числа

Целые (42, −7, 0) хранят в двоичном виде фиксированным числом бит (например, 32 или 64). Есть правила для знака (положительное / отрицательное). Сложение и сравнение выполняет процессор по тем же битовым правилам.

Дробные числа (плавающая точка)

Числа вроде 3.14 или 0.1 записывают в формате IEEE 754: мантисса + порядок (как «0,314 × 10¹» в научной записи, только в двоичной системе).

Важно для новичка: некоторые десятичные дроби нельзя представить в двоичном виде точно, как 1/3 нельзя точно записать десятичной дробью 0,333…. Поэтому в программах иногда видят:

0.1 + 0.20.30000000000000004

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

Подробнее: Числа и типы данных, ЭВМ — представление чисел.

Изображение — пиксели и цвет

Пиксель — маленький «квадратик» цвета на экране.

Растровое изображение — таблица пикселей: для каждой точки хранят цвет (часто RGB: красный, зелёный, синий по 0–255).

Разбор размера «сырого» файла без сжатия:

Фото 4000×3000 пикселей, 3 байта на пиксель (RGB):

4000 × 3000 × 3 = 36 000 000 байт ≈ 34 МБ

В JPEG тот же снимок может занять 300 КБ, потому что алгоритм убирает детали, которые глаз почти не замечает (сжатие с потерями). В PNG картинку сжимают без потерь — каждый пиксель восстанавливается точно; для фото PNG обычно тяжелее JPEG.

Вектор (SVG) — хранятся формулы линий и заливок; при показе они растеризуются в пиксели под размер экрана.

Звук — от волны к цифрам

Звук в природе — непрерывная волна давления в воздухе. В цифре его дискретизируют:

  1. Частота дискретизации (например, 44 100 Гц) — сколько отсчётов в секунду снимают с волны.
  2. Разрядность (например, 16 бит) — насколько точно в каждом отсчёте задают громкость.

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

ФорматСуть
WAVЧасто без сжатия, большой размер, «как сняли»
MP3, AACСжатие с потерями, удобно для музыки
FLACСжатие без потерь для аудиофилов

Видео — кадры + звук + умное сжатие

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

Кодеки (H.264, VP9, AV1 и др.) используют идею: соседние кадры почти одинаковы — сохраняют изменения, а не всю картинку заново. Бывают ключевые кадры (полная картинка) и промежуточные (только отличия от предыдущего).

Контейнер MP4, WebM — «коробка», в которой лежат закодированное видео и аудио.

Сжатие и архивация — разные задачи

ПонятиеЗадачаПример из жизни
СжатиеУменьшить один файлJPEG для фото, MP3 для песни
АрхивСложить много файлов в один контейнерПапка проекта → project.zip

Архиватор (ZIP, 7z, RAR) часто и объединяет файлы, и сжимает их. Формат TAR исторически только «склеивает» файлы; сжатие добавляют отдельно (tar.gz).

Внутри DOCX (Word) — тоже ZIP с XML и картинками: офисные форматы часто построены на архиве + сжатии.

Подробнее: Что такое архив, Исполняемые файлы и архивы.

С потерями и без — когда что

ТипМожно восстановить исходник точно?Где применяют
Без потерьДаPNG, ZIP, FLAC, исходники программ
С потерямиНет, только «похоже»JPEG, MP3, большинство видео в интернете

С потерями выбирают, когда важнее размер и скорость (стриминг, сайты), без потерь — когда важна точность (чертёж, скан документа, архив исходников).

Сводная таблица по видам

ВидЧто кодируемТипичные форматыГде углубиться
ТекстСимвол → Unicode → байты.txt, .docx, HTML1-09/2
ЧислаЦелые, floatв программах, CSV, JSON1-09/3
ИзображениеСетка пикселей + цветPNG, JPEG, WebP1-09/2
ЗвукОтсчёты амплитуды во времениWAV, MP3, FLAC1-09/2
ВидеоКадры + звук + сжатие между кадрамиMP4, WebM1-09/2
Задачи для самопроверки
  1. Почему фото 4000×3000 в «сыром» RGB — десятки мегабайт, а в JPEG — сотни килобайт?
  2. Чем отличается «архив homework.zip» от «фото сжатого в JPEG»?
  3. Что произойдёт, если открыть UTF-8 файл в неправильной кодировке?

Ответы: сжатие с потерями в JPEG; архив объединяет много файлов, JPEG сжимает один; кракозябры вместо букв.

Рекомендуемый порядок чтения

  1. 1-09/1 — биты, байты, системы счисления.
  2. 1-09/2 — четыре вида информации и сжатие.
  3. По желанию: 1-09/3 — типы в программировании.
  4. 1-20/2 — архиваторы.

Дальше по курсу: Компьютер и периферия.


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).