Медицинская информатика — СПбГПМУ, Педиатрический факультет
Тип данных — это множество допустимых значений и набор операций, которые можно выполнять над этими значениями. В памяти компьютера каждому типу соответствует определённый способ двоичного кодирования, фиксированный или переменный размер, диапазон представления и правила интерпретации битовой последовательности. Выбор типа данных определяет, сколько байт будет занимать значение, как оно будет храниться и обрабатываться процессором.
> [!simple] Простыми словами:
> Тип данных — это «шаблон», по которому компьютер понимает, что за информация записана в памяти: число, буква, логическое «да/нет», картинка или дата. От типа зависит, сколько памяти займёт значение и как можно с ним работать (складывать, сравнивать, выводить на экран).
В медицинской информатике используются как стандартные типы языков программирования, так и специфические форматы (DICOM, HL7, XML). Основные типы:
Представляют целые числа без дробной части. Хранятся в дополнительном коде (для знаковых) или прямом коде (для беззнаковых). Разрядность определяет диапазон:
| Тип (C/Python) | Размер (байт) | Диапазон (знаковый) | Применение в медицине |
|----------------|---------------|----------------------|------------------------|
| `int8`/`char` | 1 | -128 … 127 | Коды небольших категорий (пол: 0/1) |
| `int16`/`short` | 2 | -32 768 … 32 767 | Возраст в месяцах, порядковый номер исследования |
| `int32`/`int` | 4 | -2^31 … 2^31-1 | Уникальный ID пациента |
| `int64`/`long` | 8 | -2^63 … 2^63-1 | Большие объёмы данных (количество записей) |
> [!example] Пример:
> В электронной медицинской карте (ЭМК) возраст пациента часто хранится как целое число (`int16`) — количество полных лет. Код диагноза по МКБ-10 может быть закодирован как два байта (сопоставление с таблицей).
Представляют дробные числа. Хранятся по стандарту IEEE 754 в виде трёх полей: знак (1 бит), порядок (экспонента) и мантисса. Различают:
> [!formula] Формат IEEE 754 (32 бита)
>
> S — бит знака, E — 8-битная экспонента, M — 23-битная мантисса.
> Мантисса нормализована (неявная единица перед запятой).
Особенности: потеря точности при операциях с числами разного порядка, переполнение (infinity), нечисловые значения (NaN) — например, результат 0/0.
> [!example] Пример:
> Результат анализа глюкозы в крови (5.5 ммоль/л) может храниться как `double` для сохранения точности при расчётах. Для плотности пикселя в КТ-изображении используется `int16` или `float`.
Хранят один символ или строку. Кодировка определяет соответствие числового кода символу:
Строки обычно представлены либо как массив символов с завершающим нулём (C-style), либо как структура с длиной (Pascal-style, Python, Java). Размер строки не фиксирован.
> [!simple] Простыми словами:
> Компьютер хранит не буквы, а их номера в таблице. Таблица ASCII — это как «алфавит» на 256 клеток. Unicode — многотомная энциклопедия, где каждой букве любого языка назначен свой код.
> [!example] Пример:
> Диагноз «Сахарный диабет 2 типа» хранится в виде последовательности байт в кодировке UTF-8. В базах данных часто используют `VARCHAR(n)` или `TEXT`.
Принимает два значения: истина (`true`, 1) или ложь (`false`, 0). В памяти обычно занимает 1 байт (иногда 1 бит при битовой упаковке). Используется для флагов, условий, бинарных признаков.
> [!example] Пример:
> Признак «наличие аллергии» (есть/нет) или «результат теста положительный/отрицательный».
Представляет момент времени. Обычно хранится как целое число — количество секунд (или миллисекунд) от некоторой «эпохи» (Unix epoch: 01.01.1970 00:00:00 UTC). Дополнительно может храниться смещение часового пояса. Размер: 4 или 8 байт (32‑битные unix‑time скоро перестанут работать — проблема 2038 года).
> [!example] Пример:
> Дата и время взятия биоматериала (например, 2025-03-15 08:30:00) кодируется как Unix timestamp = 1 742 123 400. Эта запись компактна и легко сравнивается.
Последовательность байт без интерпретации. Длина переменная. Используются для хранения изображений (DICOM), аудио, видео, сжатых архивов. В медицинских информационных системах — для снимков МРТ, рентгенограмм, файлов ЭКГ.
> [!example] Пример:
> КТ-исследование сохраняется как последовательность байт в формате DICOM. Тип `BLOB` не даёт возможности напрямую искать внутри данных, требуется декодирование.
Многобайтовые типы могут храниться:
При обмене данными между разными системами (например, PACS и рабочей станцией) необходимо учитывать endianness, иначе числа будут прочитаны неправильно.
> [!simple] Простыми словами:
> Порядок байтов — это как читать число: слева направо или справа налево. Если перепутать, число 0x1234 (4660) превратится в 0x3412 (13330).
Процессор читает данные быстрее, если адрес кратен размеру типа. Поэтому компилятор вставляет «пустые» байты (padding) между полями структуры, чтобы обеспечить выравнивание. Это увеличивает объём памяти, но ускоряет доступ.
> [!example] Пример:
> Структура `{ uint8 a; uint32 b; }` может занимать 8 байт, а не 5: после `a` добавляются 3 неиспользуемых байта для выравнивания `b` по адресу, кратному 4.
Используется дополнительный код: для числа −x строится как инверсия всех битов положительного x плюс 1. Это позволяет выполнять вычитание через сложение и однозначно кодировать ноль.
> [!formula] Дополнительный код для 8-битного числа
>
> Старший бит — знак: 1 — отрицательное, 0 — положительное. Диапазон: -128…127.
Стандарт IEEE 754 предусматривает специальные битовые комбинации для:
> [!critical] Ключевой факт:
> Тип данных определяет не только размер и диапазон, но и точность вычислений. В медицинской информатике недопустимо использовать `float` для хранения дозировок лекарств или результатов критических анализов (например, гемоглобин, INR) из‑за риска потери точности при округлениях. Для финансовых и клинических расчётов всегда применяют `double` (64 бит) или десятичные типы с фиксированной точкой (`DECIMAL` в SQL).
---
Итог. Типы данных в ПК — это способ кодирования информации в битах: целые хранятся в дополнительном коде, вещественные по IEEE 754, символы через таблицы кодировок, а даты — как целочисленный timestamp. Выбор типа напрямую влияет на объём памяти, точность вычислений и корректность интерпретации данных, особенно в медицинских задачах, где ошибка округления может иметь клинические последствия.
Все вопросы раздела: Подготовка к экзамену по Медицинской информатике