Типы данных и особенности их представления в ПК

Медицинская информатика — СПбГПМУ, Педиатрический факультет

Типы данных и особенности их представления в ПК

Определение типа данных

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

> [!simple] Простыми словами:

> Тип данных — это «шаблон», по которому компьютер понимает, что за информация записана в памяти: число, буква, логическое «да/нет», картинка или дата. От типа зависит, сколько памяти займёт значение и как можно с ним работать (складывать, сравнивать, выводить на экран).

Классификация базовых типов данных в ПК

В медицинской информатике используются как стандартные типы языков программирования, так и специфические форматы (DICOM, HL7, XML). Основные типы:

1. Целочисленные типы

Представляют целые числа без дробной части. Хранятся в дополнительном коде (для знаковых) или прямом коде (для беззнаковых). Разрядность определяет диапазон:

| Тип (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 может быть закодирован как два байта (сопоставление с таблицей).

2. Вещественные типы (с плавающей точкой)

Представляют дробные числа. Хранятся по стандарту IEEE 754 в виде трёх полей: знак (1 бит), порядок (экспонента) и мантисса. Различают:

> [!formula] Формат IEEE 754 (32 бита)

>

> S — бит знака, E — 8-битная экспонента, M — 23-битная мантисса.

> Мантисса нормализована (неявная единица перед запятой).

Особенности: потеря точности при операциях с числами разного порядка, переполнение (infinity), нечисловые значения (NaN) — например, результат 0/0.

> [!example] Пример:

> Результат анализа глюкозы в крови (5.5 ммоль/л) может храниться как `double` для сохранения точности при расчётах. Для плотности пикселя в КТ-изображении используется `int16` или `float`.

3. Символьные типы

Хранят один символ или строку. Кодировка определяет соответствие числового кода символу:

Строки обычно представлены либо как массив символов с завершающим нулём (C-style), либо как структура с длиной (Pascal-style, Python, Java). Размер строки не фиксирован.

> [!simple] Простыми словами:

> Компьютер хранит не буквы, а их номера в таблице. Таблица ASCII — это как «алфавит» на 256 клеток. Unicode — многотомная энциклопедия, где каждой букве любого языка назначен свой код.

> [!example] Пример:

> Диагноз «Сахарный диабет 2 типа» хранится в виде последовательности байт в кодировке UTF-8. В базах данных часто используют `VARCHAR(n)` или `TEXT`.

4. Логический тип

Принимает два значения: истина (`true`, 1) или ложь (`false`, 0). В памяти обычно занимает 1 байт (иногда 1 бит при битовой упаковке). Используется для флагов, условий, бинарных признаков.

> [!example] Пример:

> Признак «наличие аллергии» (есть/нет) или «результат теста положительный/отрицательный».

5. Тип даты и времени

Представляет момент времени. Обычно хранится как целое число — количество секунд (или миллисекунд) от некоторой «эпохи» (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. Эта запись компактна и легко сравнивается.

6. Бинарные большие объекты (BLOB / двоичные данные)

Последовательность байт без интерпретации. Длина переменная. Используются для хранения изображений (DICOM), аудио, видео, сжатых архивов. В медицинских информационных системах — для снимков МРТ, рентгенограмм, файлов ЭКГ.

> [!example] Пример:

> КТ-исследование сохраняется как последовательность байт в формате DICOM. Тип `BLOB` не даёт возможности напрямую искать внутри данных, требуется декодирование.

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

1. Порядок байтов (endianness)

Многобайтовые типы могут храниться:

При обмене данными между разными системами (например, PACS и рабочей станцией) необходимо учитывать endianness, иначе числа будут прочитаны неправильно.

> [!simple] Простыми словами:

> Порядок байтов — это как читать число: слева направо или справа налево. Если перепутать, число 0x1234 (4660) превратится в 0x3412 (13330).

2. Выравнивание (alignment)

Процессор читает данные быстрее, если адрес кратен размеру типа. Поэтому компилятор вставляет «пустые» байты (padding) между полями структуры, чтобы обеспечить выравнивание. Это увеличивает объём памяти, но ускоряет доступ.

> [!example] Пример:

> Структура `{ uint8 a; uint32 b; }` может занимать 8 байт, а не 5: после `a` добавляются 3 неиспользуемых байта для выравнивания `b` по адресу, кратному 4.

3. Переполнение и потеря точности

4. Представление отрицательных целых

Используется дополнительный код: для числа −x строится как инверсия всех битов положительного x плюс 1. Это позволяет выполнять вычитание через сложение и однозначно кодировать ноль.

> [!formula] Дополнительный код для 8-битного числа

>

> Старший бит — знак: 1 — отрицательное, 0 — положительное. Диапазон: -128…127.

5. Представление вещественных и NaN/Inf

Стандарт IEEE 754 предусматривает специальные битовые комбинации для:

> [!critical] Ключевой факт:

> Тип данных определяет не только размер и диапазон, но и точность вычислений. В медицинской информатике недопустимо использовать `float` для хранения дозировок лекарств или результатов критических анализов (например, гемоглобин, INR) из‑за риска потери точности при округлениях. Для финансовых и клинических расчётов всегда применяют `double` (64 бит) или десятичные типы с фиксированной точкой (`DECIMAL` в SQL).

---

Итог. Типы данных в ПК — это способ кодирования информации в битах: целые хранятся в дополнительном коде, вещественные по IEEE 754, символы через таблицы кодировок, а даты — как целочисленный timestamp. Выбор типа напрямую влияет на объём памяти, точность вычислений и корректность интерпретации данных, особенно в медицинских задачах, где ошибка округления может иметь клинические последствия.

Все вопросы раздела: Подготовка к экзамену по Медицинской информатике